LC1-两数之和

1. 两数之和

分析:我们的思路是:先确定一个数,然后再确定一个数。确定第二个数的时候可以利用两种方法加速:(朴素做法是遍历)

  • 二分查找。时间复杂度为O(nlogn) , 但是由于此题数组不是有序的,所以不好直接二分。

    (理论上强行排序记录原有下标,仍然可以二分,但是过于繁琐,意义不大。)

  • 哈希表。 时间复杂度为O(n)

  1. 暴力

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            int n = nums.size();
            for(int i = 0; i < n; ++i)
                for(int j = 0; j < i; ++j)
                    if(nums[i] + nums[j] == target)return {j, i};
            return {-1, -1};
        }
    };
    
  2. 哈希表

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            unordered_map<int,int>hash;
            for(int i = 0; i < nums.size(); ++i)
                if(hash.count(target - nums[i]))
                    return {hash[target - nums[i]], i};
                else hash[nums[i]] = i;
            return {-1, -1};
        }
    };
    
posted @ 2021-06-29 13:00  Ivessas  阅读(41)  评论(0)    收藏  举报