[剑指offer]JT42---和为S的两个数字(两次哈希表,出场次序很重要)

剑指offer第四十二题

题目如下

在这里插入图片描述

思路与代码如下

每个值都查找sum-array[I]存不存在,存在说明找到了,那我们看看乘积要不要更新
然后存入map
由于题目说了要输出两个数的乘积最小,所以不能找到了就马上break;要跑完!
unordered_map比map要快很多呢!!!

#include<unordered_map>
class Solution {
    
    
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
    
    
        unordered_map<int,int> m;
        vector<int> res;
        int max=0xFFFFFFF;
        for(int i=0;i<array.size();i++){
    
    
            if(m.find(sum-array[i])!=m.end()){
    
    
                if((sum-array[i])*array[i]<max){
    
    
                    res.clear();
                    res.push_back(sum-array[i]);
                    res.push_back(array[i]); 
                    max=(sum-array[i])*array[i];
                }
            }else{
    
    
                m[array[i]]=1;
            }
        }
        return res;
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42136832/article/details/115027307
今日推荐