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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于Two pointers的个人理解

發(fā)布時(shí)間:2025/6/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Two pointers的个人理解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

剛剛在刷題的時(shí)候接觸到了一道題,題的大意是給出一個(gè)遞增的數(shù)字序列,并給出一個(gè)m,要求找到a,b兩個(gè)數(shù)字,且和為m,并且a<b;
在示例中,給出了三種思路,二分、hash值、以及two pointers;
最后一種并沒(méi)有接觸過(guò),所以去了解了一下,發(fā)現(xiàn)是很值得借鑒的思路;

two pointers思想是對(duì)有序數(shù)組的優(yōu)化遍歷;
如果根據(jù)題目中的思想,進(jìn)行兩層枚舉,則不可避免地會(huì)使時(shí)間復(fù)雜度到達(dá)O(n^2)級(jí)別。但是可以針對(duì)序列遞增這一條進(jìn)行優(yōu)化;
對(duì)這個(gè)有序序列,設(shè)定兩個(gè)索引坐標(biāo),一個(gè)為i,一個(gè)為j分別從隊(duì)頭和隊(duì)尾進(jìn)行向中間枚舉,枚舉的邊界條件是i<j;
在枚舉過(guò)程中,必定會(huì)出現(xiàn)三種情況:
在此時(shí)注意一個(gè)前提條件:i必須保持增加狀態(tài),j必須保持減小狀態(tài);
1.a+b=m,此時(shí)是我們想得到的情況,并且該情況發(fā)生時(shí),如果i增大,j減小,則a+b可能和不變;
2.a+b>m,此時(shí),在前提條件規(guī)范下,我們可以推斷如果b減小,也就是j減小,可以預(yù)測(cè)會(huì)出現(xiàn)a+b=m的情況;
3.a+b<m,此時(shí),在前提條件規(guī)范下,我們可以推斷,如果a增大,也就是i增大,可能會(huì)出出現(xiàn)a+b=m的情況;
因此,將上述判別寫(xiě)成代碼可以有以下結(jié)果:

while(i<j){if(a[i]+a[j]==m){i++;j--;}else if(a[i]+a[j]<m){i++;}else{j--;}}

這種方法可以看成是一種取巧的方法,但是其最大的特點(diǎn)是有效的減少了時(shí)間復(fù)雜度,在遞增序列的前提下,循環(huán)只需要進(jìn)行到i>=j時(shí)停止,所以理想狀態(tài)下只需要遍歷半個(gè)序列,時(shí)間復(fù)雜度只需要O(n),所以算得上求解的一種好方法;

總結(jié)

以上是生活随笔為你收集整理的关于Two pointers的个人理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。