美文网首页
leetcode 1. 两数之和

leetcode 1. 两数之和

作者: SourceZhang | 来源:发表于2020-10-14 15:13 被阅读0次

leetcode

1,哈希表
C++:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {

        vector<int> results;
        std::map<int, int> map;
        for ( int index = 0; index < nums.size(); ++index ) {

            int number = nums[index];
            int anotherNumber = target - number;
            if ( map.find(anotherNumber) != map.end() ) {

                results.push_back(map[anotherNumber]);
                results.push_back(index);

                return results;
            }

            map[number] = index;
        }

        return results;
    }
};

2,排序 + 双指针
C++:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {

        std::vector<int> temp = nums;
        std::sort(temp.begin(), temp.end());

        std::vector<int> results;
        int left = 0;
        int right = temp.size() - 1;
        while ( left < right ) {

            if ( temp[left] > target / 2 ) {

                break;
            }

            if ( temp[right] == target - temp[left] ) {

                int leftIndex = find(nums.begin(), nums.end(), temp[left]) - nums.begin();
                int rightIndex = -1;
                auto iterator = find(nums.begin() + leftIndex + 1, nums.end(), temp[right]);
                if ( iterator != nums.end() ) {

                    rightIndex = iterator - nums.begin();

                } else {

                    iterator = find(nums.begin(), nums.begin() + leftIndex - 1, temp[right]);
                    if ( iterator != nums.end() ) {

                        rightIndex = iterator - nums.begin();
                    }
                }
                results.push_back(min(leftIndex, rightIndex));
                results.push_back(max(leftIndex, rightIndex));
                ++left;
                --right;

            } else if ( temp[right] > target - temp[left] ) {

                --right;

            } else {

                // temp[right] < target - temp[left]
                ++left;
            }
        }

        return results;
    }
};

相关文章

  • 【LeetCode通关全记录】1. 两数之和

    【LeetCode通关全记录】1. 两数之和 题目地址:1. 两数之和[https://leetcode-cn.c...

  • LeetCode(1. 两数之和)

    算法描述 : 算法实现 : Java实现 : Python实现

  • leetcode 1. 两数之和

    leetcode 1. 两数之和题目: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每...

  • 1.两数之和 LeetCode

  • [LeetCode] 1. 两数之和

    给定一个整数数列,找出其中和为特定值的那两个数。 你可以假设每个输入都只会有一种答案,同样的元素不能被重用。示例:...

  • LeetCode 1. 两数之和

    题目链接:https://leetcode-cn.com/problems/two-sum/description...

  • LeetCode 1. 两数之和

    题目描述 题解 暴力法 时间复杂度为,空间复杂度为。 哈希表法 时间复杂度为,空间复杂度为。 哈希表法进阶 时间复...

  • [LeetCode] 1. 两数之和

    前言 从今天开始,将会开启我的 LeetCode 打卡之路。为了能让打卡坚持下去,就给自己设定了用博客来记录打卡过...

  • LeetCode 1. 两数之和

    题目: 题目地址:https://leetcode-cn.com/problems/two-sum/ 问题描述: ...

  • Leetcode 1.两数之和

    题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他...

网友评论

      本文标题:leetcode 1. 两数之和

      本文链接:https://www.haomeiwen.com/subject/wtlwpktx.html