LeetCode 刷題筆記 - 1. 兩數之和

難度:

簡單swift

描述:

給定一個整數數組nums和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。 你能夠假設每種輸入只會對應一個答案。可是,你不能重複利用這個數組中一樣的元素。數組

示例:

給定 nums = [2, 7, 11, 15], target = 9
由於 nums[0] + nums[1] = 2 + 7 = 9
因此返回 [0, 1]
複製代碼

來源:力扣(LeetCode) 連接:leetcode-cn.com/problems/tw… 著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。bash


語言:

swift網絡

解析:

這題的本意就是 number1 + number2 = targetnumber1能夠通過遍歷數組獲得,可是在取number2的時候咱們不能也去遍歷數組,這樣的時間複雜度會是O(n^2),並且代碼看起來太醜了。因此經過number2 = target - number1,咱們能夠在遍歷數組的時候將每一個數字存起來,而後拿到每一個number,將target - number獲得的差值去判斷是否存在。存儲的辦法咱們用字典,由於hashmap比較快。同時爲了不重複利用數組的某個元素,在有對應值的時候,咱們不作處理。ui

代碼以下:spa

class Solution {
    func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
        var hashMap = [Int: Int]()
        for index in 0...nums.count - 1 {
        let minusValue = target - nums[index]
            if hashMap[minusValue] != nil && index != hashMap[minusValue] {
                return [hashMap[minusValue]!, index]
            }
            else {
                hashMap[nums[index]] = index
            }
        }
        return []
    }
}
複製代碼

總結

我認爲在合適場景利用hashmap會有不錯的效果。code

相關文章
相關標籤/搜索