题目:快速找出一个数组中的两个数字,使两个数字之和为一个特定的值。假设数组中至少存在一组符合要求的解。
常规解法是遍历两次数组,时间复杂度为O(N²),为了更快找到的两个符合条件的数,可以先通过数组有序,从前后两个方向遍历数组,求解结果.
核心代码:
<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>