LeetCode twosum C++ map实现

    xiaoxiao2021-03-25  90

    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是统计某一个键值的个数的。

    转载请注明原文地址: https://ju.6miu.com/read-32429.html

    最新回复(0)