1. 程式人生 > >leetcode記錄貼(go語言)

leetcode記錄貼(go語言)

problems 空間換時間 方法 follow nil 一次 code turn make

沒事的時候打算開始玩一玩leetcode,不然天天寫代碼,卻對算法沒啥認識還是有點尷尬的。雖說是做題,其實大部分就是為了看看別人牛逼的思路。盡量每天一題把~

1.兩數之和

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

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重復利用。
例:
        給定 nums = [2, 7, 11, 15], target = 9

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

第一種方法就是便利數組,隨著數組長度增加,執行時間指數型增加。

#時間復雜度:O(n^2)
#空間復雜度:O(1)
func twoSum(nums []int, target int) []int {
    for firstIndex,firstNum := range nums{
        for secondIndex,secondNum := range nums{
            if firstIndex != secondIndex && firstNum + secondNum == target{
                return []int{firstIndex, secondIndex}
            }
        }
    }
    return nil
}

第二種方式是以空間換時間,把數據存在哈希表裏面,最多只用完全遍歷一次數組,就能得到結果。

#時間復雜度:O(n)
#空間復雜度:O(n)
func twoSumHash(nums []int, target int) []int {
    m :=  make(map[int]int)
    for index,num := range nums{
        i,ok := m[target - num]
        if ok {
            return []int{i,index}
        }
        m[num] = index
    }
    return nil
}

題目鏈接:https://leetcode-cn.com/problems/two-sum/description/

作為腦子是條直線的小白,解題的方法是第一種,打死估計都想不到第二種把。

leetcode記錄貼(go語言)