剛剛在刷題的時候接觸到了一道題,題的大意是給出乙個遞增的數字序列,並給出乙個m,要求找到a,b兩個數字,且和為m,並且atwo pointers思想是對有序陣列的優化遍歷;
如果根據題目中的思想,進行兩層列舉,則不可避免地會使時間複雜度到達o(n^2)級別。但是可以針對序列遞增這一條進行優化;
對這個有序序列,設定兩個索引座標,乙個為i,乙個為j分別從隊頭和隊尾進行向中間列舉,列舉的邊界條件是i在此時注意乙個前提條件:i必須保持增加狀態,j必須保持減小狀態;
1.a+b=m,此時是我們想得到的情況,並且該情況發生時,如果i增大,j減小,則a+b可能和不變;
2.a+b>m,此時,在前提條件規範下,我們可以推斷如果b減小,也就是j減小,可以**會出現a+b=m的情況;
3.a+b這種方法可以看成是一種取巧的方法,但是其最大的特點是有效的減少了時間複雜度,在遞增序列的前提下,迴圈只需要進行到i>=j時停止,所以理想狀態下只需要遍歷半個序列,時間複雜度只需要o(n),所以算得上求解的一種好方法;
Two pointers技巧的應用
查詢陣列中兩個位置不同的數字之和為sum的個數。先來看看暴力法,粗略估計,時間複雜度為0 n 2 void violence int a,int totalnumber,int sum int count 0 計算不匹配的結果次數 不匹配次數是41次,嗯,看起來結果還不錯的樣子。來看看two poi...
關於jquery的20個問題
1 在乙個表單中,想要找到指定元素的第乙個元素用first實現,第二個元素用 實現。2 有這樣一段html 要想選中這乙個文字框,相應的jquery 為 3 jquery方法在對jquery物件執行所需操作後返回 4 假設頁面有乙個檢視按鈕 要將按鈕設定為不可見,執行的jquery語句為 5 在jq...
關於google的8個預言
1.chrome作業系統就是乙個linux作業系統 乙個chrome瀏覽器,而且很可能在桌面的形式上要大量的節省資源。最多隻包含乙個chrome瀏覽器的啟動按鈕和幾個作業系統設定的按鈕,甚至於,沒有桌面的概念,整個螢幕就是乙個多標籤的chrome瀏覽器,作業系統設定的按鈕也是通過位址列來訪問。世間一...