leetcode記錄貼(go語言)
阿新 • • 發佈:2018-09-13
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語言)