1. 程式人生 > >leetcode 1 Two sum(兩數相加)

leetcode 1 Two sum(兩數相加)

題目要求

給定一個整數陣列,返回兩個數字的索引,使它們加起來成為一個特定的目標。
假設每個輸入只有一個解決方案,並且不會兩次使用相同的元素。

輸入示例

Example:

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].

思路

1、暴力遍歷,兩層。能找到答案,但是時間複雜度較高。
2、使用雜湊表,根據 nums[i] + nums[j] = target,當前遍歷元素已知是nums[i],且目標target已知,所以只要判斷**nums[j]**即可。如果nums[j]在雜湊表中,那麼返回i,j的索引, 否則把[ nums[j], j ] 加入到雜湊表中,形式為本身元素為key,元素的索引下標為value。

主要程式碼 c++

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
    unordered_map<int,int> map; // 構建雜湊表,unordered_map的實現就是雜湊
    vector<int> ans;
    for(int i=0;i<nums.size();++i)
    {
        int complement = target - nums[i];
        if
(map.count(complement)>0) // 如果“nums[j]”在雜湊表中 { ans.push_back(map[complement]); // 返回“nums[i],nums[j]”的索引,即整數的下標 ans.push_back(i); return ans; } map.insert(make_pair(nums[i],i)); // 雜湊表的儲存形式:key(整數):value(整數對應的下標) } return ans; }
};

解題關鍵:找到nums[i] + nums[j] = target這個方程,以及正確使用雜湊表的存放。

原題連結:https://leetcode.com/problems/two-sum/