?一、題目描述
題目鏈接
購物車內的商品價格按照升序記錄于數組?price
。請在購物車中找到兩個商品的價格總和剛好是?target
。若存在多種情況,返回任一結果即可。
示例 1:
輸入:price = [3, 9, 12, 15], target = 18 輸出:[3,15] 或者 [15,3]
示例 2:
輸入:price = [8, 21, 27, 34, 52, 66], target = 61 輸出:[27,34] 或者 [34,27]
二、題目解析
注意題目中的關鍵字——有序數組,但我們遇見有序的情況,一定要優先考慮兩種算法:
二分和雙指針
但是能用雙指針,我們優先使用雙指針,因為只要能用雙指針的算法一般都是最優的,該算法能使時間復雜度降維!
雙指針思想:
定義左右兩個指針,分情況討論,循環遍歷數組一遍,即可找出答案。
三、原碼
int* twoSum(int* price, int priceSize, int target, int* returnSize) {//有序,運用雙指針的算法解決*returnSize = 2;int left = 0;int right = priceSize - 1;while(left < right){if((price[left] + price[right]) == target){int* arr = (int*)malloc(sizeof(int) * (*returnSize));arr[0] = price[left];arr[1] = price[right];return arr;}else if(price[left] + price[right] > target)right--;elseleft++;} return NULL;
}