LeetCode 1 兩數之和

貴有恆 何須三更起五更眠
最無益 只怕一日曝十日寒

題目鏈接:two sum
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。

示例:

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

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

思路

用字典保存遍歷過的數字和下標
尋找target-nums[i]是否在字典中出現過,是則返回兩數的下標
否則存入nums[i]及其下標

代碼實現
python2

思路:通過字典模擬哈希查詢的過程,

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        遍歷列表同時查字典
        """
        dct = {}
        for i, n in enumerate(nums):
            if target - n in dct:
                return [dct[target - n], i]
            dct[n] = i

enumerate()函數
將一個可遍歷的數據對象(如列表、元組或字符串)組合爲一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。

seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
     print i, element
     
0 one
1 two
2 three
C++
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> a;//提供一對一的hash
        vector<int> b(2,-1);//用來承載結果,初始化一個大小爲2,值爲-1的容器b
        for(int i=0;i<nums.size();i++)
        {
            if(a.count(target-nums[i])>0)
            {
                b[0]=a[target-nums[i]];
                b[1]=i;
                break;
            }
            a[nums[i]]=i;//反過來放入map中,用來獲取結果下標
        }
        return b;
    };
};
JAVA
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章