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

  • 示例: [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
        
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容