leetcode 1-Two Sum

来源:互联网 发布:mac txt阅读器 编辑:程序博客网 时间:2024/06/04 00:35

题目链接:

两种思路:

思路一:

1. 排序

2. 从两边同时开始找满足target的两个数。

《代码改天写》


思路二:

1. 利用Map查找元素的时间为O(1)的特性来搞

网上普遍的做法,击败了27%的C++ submission:

class Solution {public:    vector<int> twoSum(vector<int> &nums, int target) {        vector<int> result;        map<int,int> hmap;        for(int i=0;i<nums.size();++i){            if (!hmap.count(nums[i])){                hmap.insert(make_pair(nums[i], i));            }            if (hmap.count(target-nums[i])) {                int n=hmap[target-nums[i]];                if(n<i){                    result.push_back(n);                    result.push_back(i);                    return result;                }            }                }        return result;    }};

我自己改进后的做法,可以击败45%的C++ submission:

主要感觉之前网上的做法对于判断一个数是否在map里这一点是没有必要的,

同时我们可以先直接用target做差判断一个数是否在map里,再去添加一个新的map,

这样就省去了判断n<i(这一点)

class Solution {public:    vector<int> twoSum(vector<int> &nums, int target) {        vector<int> result;        map<int,int> hmap;        int size=nums.size();        for(int i=0;i<size;++i){            if (hmap.count(target-nums[i])) {                result.push_back(hmap[target-nums[i]]);                result.push_back(i);                return result;            }            hmap.insert(make_pair(nums[i], i));        }        return result;    }};


0 0
原创粉丝点击