企業(yè)網(wǎng)站的建設(shè)水平直接關(guān)系到網(wǎng)絡(luò)營(yíng)銷的效果java培訓(xùn)機(jī)構(gòu)
原題鏈接:1.兩數(shù)之和
根據(jù)題意可以得出 需要找出數(shù)組nums內(nèi) 有兩個(gè)元素相加等于target的兩個(gè)整數(shù),并且返回這兩個(gè)證書的下標(biāo)。并且數(shù)組內(nèi)有重復(fù)元素,但是返回的答案不能有重復(fù)元素出現(xiàn)
要記住的就是,需要判斷元素是否出現(xiàn)過(guò),或者是否在集合里存在,就可以考慮用哈希法去做
使用什么方法,為什么使用?
可以使用hash法,因?yàn)橐鶕?jù)值返回下標(biāo),可以理解為根據(jù)key返回value,鍵值對(duì)
所以也使用map,又因?yàn)槭切枰樵?#xff0c;在時(shí)間復(fù)雜度上,就是用以哈希表為底層的unordered_map容器。
map主要用來(lái)去重 以及到時(shí)候返回需要查找的值相應(yīng)的下標(biāo)
本題中key用來(lái)存儲(chǔ)需要的差值,而value用來(lái)存儲(chǔ)下標(biāo)
思路:
只需要遍歷nums,然后從nums[i]開始計(jì)算target - nums[i]得出差值 再到unordered_map中查詢是否有需要的差值
如果沒有,則將numsi和i(下標(biāo))存入unordered_map 中,等待下次查詢
如果有,則代表map->scond為需要的差值,而i為差值的下標(biāo),返回{map->scond,i }即可
map ->scond 為該元素的值,map ->fast為該元素的鍵
代碼:
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {std::unordered_map <int,int> map;for(int i = 0; i < nums.size(); i++){int s = target - nums[i];auto item = map.find(s);//存在返回元素的迭代器,不存在則返回map.end()if(item == map.end()){//差值不存在于map里面,代表未出現(xiàn)過(guò),則將nums[i]的值和下標(biāo)存入map中map.insert(pair<int, int>(nums[i],i));}else{//差值存在map里面return {item->second,i};}}return {};}
};