题解 | #和为S的两个数字#

和为S的两个数字

https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> ans;
        unordered_map<int, int> num_mp;
        for(int i = 0; i <array.size();i++){
            int complement = sum - array[i];
            if(num_mp.find(complement) != num_mp.end()){
                ans.push_back(complement);
                ans.push_back(array[i]);
                return ans;
            }
            num_mp[array[i]] = i;
        }
        return ans;
    }
};


class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int>ans;
        for(int i = 0 ; i < array.size(); i++){
            for(int j = i ; j < array.size() ;j++){
                if(array[i] + array[j] == sum){
                    ans.push_back(array[i]);
                    ans.push_back(array[j]);
                    return ans;
                    break;
                }
            }
        }
        return ans;
    }
};

首先是用哈希表来做这个,挺巧妙的,另外就是用数组排序来做,但是是有限制的,数字大小会超过int型,所以最后通过不了。

但是哈希表是没有这个问题的。哈希表巧妙就巧妙在这个complement,这个find函数用的巧妙,找到了之后其实无所谓,不用管都可以。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务