本篇主要介紹一道基礎演算法題,兩數相加,目的我們首先有乙個值,還有乙個array中,找出是否其中有兩個數相加起來等於這個值,這裡有三種解法,先從complexity最高的一種開始介紹
// 1. 暴力解 o(n^2)
func bruteforcesolution(array: [int], sum: int) -> bool
let midindex = array.count / 2
let minindex = 0
let maxindex = array.count - 1
let midvalue = array[midindex]
if numbertolookfor < array[minindex] || numbertolookfor > array[maxindex]
if numbertolookfor < midvalue
if numbertolookfor > midvalue
if midvalue == numbertolookfor
return false
}binarysearchsolution(array: array, sum: 5)
第二種是用二分法來解,在第乙個function中,這裡我寫了乙個for loop,我們需要找到在求和的值減去其中某個元素得到的補數,這個補數就是我們需要從二分法裡找到的值,二分法的邏輯可以看我之前的寫的部落格
下面是第三種方法,也是最效率的辦法,指標解法
// 3. 指標解法 o(n)
func pointersolution(array: [int], sum: int) -> bool else if tempsum > sum else if tempsum < sum
}return false
}pointersolution(array: array, sum: 9)
指標解法的邏輯就是我們可以想設定兩個指標,在這個while loop中,如果兩數相加得到的值大於我們想要的值,高位的指標便向下移乙個元素,如果小於我們想要的值,地位的指標便向上移乙個元素,當兩個指標指向同乙個元素的時候,這個array中就沒有我們想要找的值,就return false,如果相加等於我們的值,return true leetcode 2 two sum 兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。由於他是倒敘儲存的,所以實際上省去了很多的...
leetcode 兩數之和(Two Sum)
暴力法很簡單。遍歷每個元素 xx,並查詢是否存在乙個值與 target xtarget x 相等的目標元素。public int twosum int nums,int target throw new illegalargumentexception no two sum solution 複雜度...
leetcode 兩數之和 Two Sum
題目 給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 分析 暴力破解法,遍歷陣列,兩數之和為targe...