題目:快速找出一個數(shù)組中的兩個數(shù)字,使兩個數(shù)字之和為一個特定的值。假設(shè)數(shù)組中至少存在一組符合要求的解。
常規(guī)解法是遍歷兩次數(shù)組,時間復(fù)雜度為O(N2),為了更快找到的兩個符合條件的數(shù),可以先通過數(shù)組有序,從前后兩個方向遍歷數(shù)組,求解結(jié)果.
核心代碼:
<pre><code>` func sumNumber(arr:[Int],sum:Int)->(Int,Int) {
var i:Int = 0
var j:Int = arr.count - 1
while i < j {
if arr[i] + arr[j] < sum {
i += 1
} else if arr[i] + arr[j] > sum {
j -= 1
} else {
return (i,j)
}
}
return (-1,-1)
}`</code></pre>
測試代碼:
<pre><code>var sumArr:[Int] = [100,5,6,8,3,7,9,10,0,40,1,2] find.quickSort(arr: &sumArr, low: 0, high: sumArr.count - 1) var sumResult4:(Int,Int) = find.sumNumber(arr: sumArr, sum: 10) print("FlyElephant---\(sumResult4)")</code></pre>