程式設計師面試一百題-10-在排序陣列中查詢和為給定值的兩個數字
阿新 • • 發佈:2018-12-16
1-題目
:
輸入一個已經按升序排序過的陣列
和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字;要求時間複雜度是O(n)
;如果有多對數字的和等於輸入的數字,輸出任意一對即可。
2-示例
:
輸入 : 1、2、4、7、11、15和15
輸出 : 4、11
3-思路
:
注意是已經升序的陣列,所以我們維持兩個指標
,分別指向第一個數和最後一個數。當兩個數的和小於期待的和時,向後移動前指標以增加和;當兩個數的和大於期待的和時,向前移動後指標以減小和;當相等時,輸出兩個數字並結束程式。
4-程式碼
:
//若存在則返回true,否則返回false bool FindTwoNumbersWithSum(int data[], unsigned int length, int sum, int &num1, int &num2) { bool found = false; if (length < 1) { return found; } int ahead = length - 1; int behind = 0; while (ahead > behind) { int curSum = data[ahead] + data[behind]; //找到兩個數之和等於期待值 if (curSum == sum) { num1 = data[ahead]; num2 = data[behind]; found = true; return found; } //若兩數之和小於期待值 else if (curSum < sum) { behind++; } //若兩數之和大於期待值 else { ahead--; } } //若沒有找到,則返回false return found; }