LeetCode twosum C++ map实现

来源:互联网 发布:淘宝卖衣服怎么进货 编辑:程序博客网 时间:2024/04/28 20:17
class Solution {public:    vector<int> twoSum(vector<int>& nums, int target) {         map<int,int> my_Map;        vector<int> result;        for(int i = 0 ; i < nums.size() ; i++)        {
    //保证每次插入的元素是在my_Map里是唯一的            if(!my_Map.count(nums[i]))            {                my_Map.insert(pair<int, int>(nums[i],i));            }            if(my_Map.count(target-nums[i]))            {                int n = my_Map[target-nums[i]];
//为什么加上n<i,考虑这样一种情况nums=[3,3],target=6,i=0的时候my_Map.count(target-nums[i])=1,条件为真,所以n=my_Map[target_nums[i]]=0,而题目中要求一个数不能用两次,所以必须在最后一个数之前的位置寻找。                if(n < i)                {                    result.push_back(i);                    result.push_back(n);                    return result;                }            }        }    }};

对于C++ map,红黑树实现低层,比平衡树操作简单,一层红的一层黑的。时间复杂度O(logn)据说hash_map会更快O(n)。

注意:

1.不同的对象的指针不能比较。

2.map的find找到的是第一个所指明的键值的位置。

3.count是统计某一个键值的个数的。

0 0