日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两数之和 II - 输入有序数组

發布時間:2025/3/21 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两数之和 II - 输入有序数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個已按照 升序排列 的整數數組 numbers ,請你從數組中找出兩個數滿足相加之和等于目標數 target 。

函數應該以長度為 2 的整數數組的形式返回這兩個數的下標值。numbers 的下標 從 1 開始計數 ,所以答案數組應當滿足 1 <= answer[0] < answer[1] <= numbers.length 。

你可以假設每個輸入只對應唯一的答案,而且你不可以重復使用相同的元素。

示例 1:
輸入:numbers = [2,7,11,15], target = 9
輸出:[1,2]
解釋:2 與 7 之和等于目標數 9 。因此 index1 = 1, index2 = 2

示例 2:
輸入:numbers = [2,3,4], target = 6
輸出:[1,3]

示例 3:
輸入:numbers = [-1,0], target = -1
輸出:[1,2]

提示: 2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000 numbers 按 遞增順序 排列
-1000 <= target <= 1000 僅存在一個有效答案

這道題很簡單,我開始想到用兩重循環實現,代碼如下:

/*** Note: The returned array must be malloced, assume caller calls free().*/ int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {int i,j,flag=0;int *index=(int *)malloc(sizeof(int)*2);for(i=0;i<numbersSize-1;i++){for(j=i+1;j<numbersSize;j++){if(numbers[i]+numbers[j]==target){index[0]=i+1;index[1]=j+1;*returnSize=2;flag=1;break;}}if(flag==1)break;}return index; }

但是我沒有想到用雙指針如何寫,看了官方題解后再分析一下思路:
定義一個low指針指向數組頭,定義一個high指針指向數組尾,首位相加,若相等則存入返回數組,若和小于targe則low右移一位,若和大于targe則high左移一位。一直到找出為止。

為什么小于targe左移,而大于targe右移呢?
很好理解,當low和high分別位于數組首尾時,high是最大值,low是最小值;若他倆和小于targe,則需要增大和,那么low只能右移增大;
同理若他倆和大于targe,則需要減小和,那么high只能左移減小;

代碼如下:

/*** Note: The returned array must be malloced, assume caller calls free().*/ int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {int low=0,high=numbersSize-1;int *index=(int*)malloc(sizeof(int)*2);*returnSize=2;while(low<high){if(numbers[low]+numbers[high]==target){index[0]=low+1;index[1]=high+1;break;}else if(numbers[low]+numbers[high]<target)low++;elsehigh--;}return index; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的两数之和 II - 输入有序数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。