跟小马哥学算法leetcode_01

跟小马哥刷LeetCode算法。这边是小马哥的专栏——马志峰的编程笔记

题目 leetcode_01

题目是在一个给定的整型数组和一个整数,在数组中找到两个数使得他们的和等于给定的整数,并返回下标。

解体思路

之前的思路就是两个循环,然后设置条件如果nums[i] + nums[j] == target就把两个数的下标返回出来。

代码如下

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> r;
        auto isize = nums.size();
        for(int i = 0; i1; ++i)
            {
                for(int j = i+1; jif(nums[i] + nums[j] == target)
                        {
                            r.push_back(i);
                            r.push_back(j);
                            return r;
                        }

                    } 
             }
           return r;
    }

};


}

另外还有一种思路,在C++中有一个关联容器是map,他可以存两个数据,正好对应题目中的数跟下表i。所以只要验证数组中是否存在一个数等于target - nums[i]就可以了。但是要考虑的是会存在一种情况就是当target = 2*nums[i]的情况,比如数组中有(3,2,4)target为6,那么可能会出现3+3这种情况这个是要排除的。

if(twoSum_map.find(key) != twoSum_map.end() && twoSum_map[key] != i)//将另外一种情况加入判断语句。

代码如下:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
       vector<int> r;
       map<int, int> twoSum_map;
       auto isize = nums.size();
       for(auto i=0; iint,int>(nums[i],i));  //将数组存入到map容器中
       for(auto i=0; iauto key = target - nums[i];

           if(twoSum_map.find(key) != twoSum_map.end() && twoSum_map[key] != i)
            {
                r.push_back(i);
                r.push_back(twoSum_map[key]);

                return r;

            }

       }
       return r;
    }

};

你可能感兴趣的:(跟小马哥刷算法)