leetcode-1-two sum

来源:互联网 发布:阿里云系统盘多大合适 编辑:程序博客网 时间:2024/06/06 03:03
#include <iostream>#include <vector>#include <unordered_map>using namespace std;/* 用暴力搜索就要O(n)或者至少是O(nlgn),似乎会超时。 如果用hash的话就能保证O(n),注意要保存元素的下标, 所以用unordered_map,还要注意两个下标要按从小到大 的顺序。 因为结果只可能有一对下标,所以相同的数字最多有两个, 由于存入unordered_map的时候相同数字的下标会覆盖, 所以比较下标的时候保险就是一个用nums的下标,一个用查找 unordered_map返回的下标。 */class Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {        unordered_map<int, int> mymap;        vector<int> inds;        for (int i = 0; i < nums.size(); i++) {            mymap.insert(make_pair(nums[i], i));        }        for (int i = 0; i < nums.size(); i++) {            int gap = target - nums[i];            if (mymap.find(gap) != mymap.end()) {                if (i > mymap[gap]) {                    inds.push_back(mymap[gap]);                    inds.push_back(i);                    break;                } else if (i < mymap[gap]){    //一定是两个不同的下标                    inds.push_back(i);                    inds.push_back(mymap[gap]);                    break;                }            }        }        return inds;    }};int main(int argc, const char * argv[]) {    Solution s;    vector<int> n = {0,4,3,0};    vector<int> result = s.twoSum(n, 0);    for (int i = 0; i < result.size(); i++) {        cout << result[i] << " ";    }    cout << endl;    return 0;}


更改(去重)

class Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {        unordered_map<int, int> mymap;        vector<int> inds;        for (int i = 0; i < nums.size(); i++) {            mymap.insert(make_pair(nums[i], i));        }        for (int i = 0; i < nums.size(); i++) {            int gap = target - nums[i];            if (mymap.find(gap) != mymap.end()) {                if (i > mymap[gap]) {                    inds.push_back(mymap[gap]);                    inds.push_back(i);                    break;                }            }        }        return inds;    }};



0 0
原创粉丝点击