LeetCode两数之和

两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解法一:
其实效率已经挺高了

 vector<int> twoSum(vector<int>& nums, int target) {
       map<int, int> m;
        for (vector<int>::iterator iter=nums.begin(); iter!=nums.end(); ++iter) {
            if (m.find(target -*iter)!=m.end()) {
                return {iter-nums.begin(), m[target - *iter]};
            }
            m[*iter] = iter-nums.begin();
        }
        return {};
    }

解法二:
给出更高效率的

 vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> arr(nums);
        sort(arr.begin(), arr.end());
        int i = 0, j = arr.size() - 1;
        while (i < j)
        {
            if (arr[i] + arr[j] < target)
                i++;
            else if (arr[i] + arr[j] > target)
                j--;
            else
                break;
        }
        vector<int> ret;
        int a = distance(nums.begin(), find(nums.begin(), nums.end(), arr[i]));
        reverse(nums.begin(),nums.end());
        int b = nums.size() - 1 - distance(nums.begin(), find(nums.begin(), nums.end(), arr[j]));
        ret.push_back(a);
        ret.push_back(b);
        return ret;
    }

猜你喜欢

转载自blog.csdn.net/wjh_init/article/details/80072796