能否快速找出乙個陣列中的兩個數字,讓這兩個數字之和等於乙個給定的值,為了簡化起見,我們假設這個陣列中肯定存在至少一組符合要求的解。
法一:最直接的方法就是,窮舉法,複雜度為o(n^2);
法二:利用sum減去a[i],再查詢sum-a[i],是否在陣列裡,這時候就變成查詢了,可利用二分查詢;排序的複雜度為o(nlgn),查詢的複雜度為o(lgn),最終的複雜度為o(nlgn);
,也可以利用hash查詢,只不過空間複雜度增加o(n);
法三:先排好序,然後,i=0,j=n-1,看arr[i]+arr[j]是否等於sum,等於停止查詢,小於sum,i++;大於sum,j--;複雜度為o(n)+o(nlgn);
for(i=0;j=n-1;iif(arr[i]+arr[j]==sum)return (i,j);
else if(arr[i]+arr[j]i++;
else
j--;
return (i,j);
快速尋找滿足條件的兩個數(程式設計之美)
快速找出乙個陣列中的兩個數,讓此兩個數之和等於乙個給定的數。如 5 6 1 4 7 9 8 中找出兩個數之和等於10的數 程式設計之美之美p177有詳細解答過程,思路是先排序 o nlog n 然後儲存兩個指標beg end,初始指向頭部和尾部,如過 beg end sum,則返回 如果 beg e...
程式設計之美2 12 快速尋找滿足條件的兩個數
題目 能否快速找出乙個陣列中的兩個數字,讓這兩個數字之和等於乙個給定的值m。解法一 窮舉 o n 2 解法二 先排序,再二分查詢m a i 排序o nlogn 每個數二分查詢o nlgon 總的時間複雜度o nlogn 解法三 hash表,給定乙個數字,根據hash對映查詢另乙個數字是否在陣列中,o...
程式設計之美2 12 快速尋找滿足條件的兩個數
快速尋找滿足條件的兩個數 程式設計之美2.12 include using namespace std 快速排序演算法 void swap int a,int i,int j int partition int a,int low,int high swap a,low,high while low...