在数组中找出一对数字,让数字之和等于某个固定的数

  • 示例: [3,7,2,9], 找出和为9的(7,2),返回下标集合{1,2}
  • 思路:既然要找的结果是下标,就让下标成为value,建立一个map,遍历数组,让map的key为元素,下标为value,这样可以以最快的速度获取到。再次遍历数组,拿出第一个元素3,9-3=6,根据6去map找有没有结果(没有),继续下一轮循环,拿出7,9-7=2,根据2去map查找下标(index = 2),比较当前索引(1)和找到的下标(2),排序{1,2},程序结束。
  • 代码 (C++ version)
vector<int> twoSum(vector<int>&nums, int target) {
        vector<int> result;
        unordered_map<int, int> map;         
        for(int i=0; i<nums.size(); i++){
            map[nums[i]] = i;    
        }            
        
        for(int i=0; i<nums.size(); i++){     
            int rest = target - nums[i];      
            if(map.find(rest) != map.end()){
                int index = map[rest];  
                if(index == i)//有可能自身是目标的一半 排除掉
                   continue;
                if(index < i){
                   result = {index, i};
                }else{
                   result = {i, index};
                }
               return result;
            }//end for if
        }//end for loop
        
    }

推荐阅读更多精彩内容