leetcode--TwoSum 練習

class Solution {
public:
    vector twoSum(vector& nums, int target){
        std::unordered_map foo1;
		vector result;
			for (int i = 0; i < nums.size() ; i++) {
				int resttarget = target-nums[i];
				std::unordered_map::iterator it;
                it = foo1.find(resttarget);
                if( it != foo1.end() ){
				    result.push_back(it->second);
				    result.push_back(i);
				    return result;
				}
				foo1[nums[i]]=i;
			}
		return result;
	}
};

class Solution {
public:
    vector twoSum(vector& nums, int target){
        std::unordered_map foo1;
		vector result;
			for (int i = 0; i < nums.size() ; i++) {
				int resttarget = target-nums[i];
				std::unordered_map::iterator it;
                it = foo1.find(resttarget);
                if( it != foo1.end() ){
				    result.push_back(it->second);
				    result.push_back(i);
				    return result;
				}
				foo1[nums[i]]=i;
			}
		return result;
	}
};


針對TwoSum的問題解決的基本思路:

1.暴力解決方法:遍歷數據,查找可能的結果;

2.利用unordered_map,解決在基於主鍵地快速檢索各個元素的問題,有點類似python中的list。

http://classfoo.com/ccby/article/S3XoG 有關於unordered_map的具體使用說明,需要注意的是查找主鍵的方法:

  1. // 查找主鍵4
  2.     std::unordered_map<int,double>::iterator it;
  3.     it= foo1.find(4);
  4.    if( it!= foo1.end())
  5.    {
  6.         std::cout<<"foo1.find(4):";
  7.         std::cout<<"("<< it->first<<","<< it->second<<")" 
  8.            << std::endl;
  9.    }
這裏定義的it的類型std::unordered_map<int,double>::iterator;以及跟foo1.end()方法比較,而不是元素(方法有括弧)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章