題目:輸入一個已經按升序排序過的數組和一個數字,在數組中查找兩個數,使得它們的和正好是輸入的那個數字。


要求時間復雜度是O(n)。如果有多對數字的和等於輸入的數字M,輸出任意一對即可。
例如輸入數組1、2、4、7、11、15和數字15。由於4+11=15,因此輸出4和11。

思路:

(1)讓指針指向數組的頭部和尾部,相加,如果小於M,則增大頭指針,如果大於則減小尾指針

(2)退出的條件,相等或者頭部=尾部

算法:

void function(int a[],int n,int M){

      int i=0,j=n-1;

  while(i!=j){

           if(a[i]+a[j]==M){

      printf("%d,%d",a[i],a[j]);

                 break;

    }

    a[i]+a[j]>M?j--:i++;

  }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM