1. 程式人生 > >leetcode 刷題(1)--- 兩數之和

leetcode 刷題(1)--- 兩數之和

給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用

示例:

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

  因為 nums[0] + nums[1] = 2 + 7 = 9

  所以返回 [0, 1]

應該注意問題:1.陣列是否可以改變原來順序。2.同樣的元素是否可以被重複利用。3.是否存在多組解。4.時間複雜度。5.空間複雜度。

方法1:利用 map,時間複雜度 O(n),空間複雜度 O(n)。

class Solution {
public:
  vector<int

> twoSum(vector<int>& nums, int target) {
    vector<int> result;
    map<int, int> num;
    for (int i = 0; i<nums.size(); ++i){
      if (num.find(target-nums[i]) != num.end()){
        result.push_back(num[nums[i]]);
        result.push_back(i);
      }
      else{
        num[nums
[i]]=1;
      }
    }
    return result;
  }
};

方法2:先排序,然後利用左右兩個指標遍歷,如果相加之和大於目標值則右指標前移,如果小於則左指標後移,時間複雜度 O(nlogn),空間複雜度 O(1)