程式設計之美2 12 快速尋找滿足條件的兩個數

2021-07-15 15:03:44 字數 1139 閱讀 3167

/*快速尋找滿足條件的兩個數--程式設計之美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 < high && a[low] <= key)

swap(a,low,high);

}return low;

}void quicksort(int a, int low, int high)

}/*二分查詢*/

bool binarysearch(int a, int low, int high, int key)

else

if(a[mid] < key )

else

}return

false;

}/*思路一:

先排序;

定義兩個變數:left和right,分別指向陣列的最左邊和最右邊的數;

若arr[left]+a[right]>sum right--;否則left++;

直到arr[left]+a[right]=sum為止

時間複雜度為:o(nlogn)*/

bool findsum1(int a,int left,int right,int sum)

else

if(a[left]+a[right]else

}return

false;

}/*思路二:

先排序;

再在遍歷陣列的時候採用二分查詢去查詢sum-array[i]的值;

從而時間複雜度控制在o(nlogn)

*/bool findsum2(int a,int low,int high,int sum)

}return

false;

}/*思路三:

使用hash結構,即使用hash結構來代替二分查詢,用空間換取時間

**此處省略*/

int main()

; cout

0;}

程式設計之美讀書筆記2 12 快速尋找滿足條件的兩個數

找出陣列中的兩個數字,相加等於乙個給定的數字。1 遞迴,從第乙個元素和最後乙個元素相加,如果大於sum,則a b 1,繼續判斷兩個數的和 如果小於sum,則 a 1 b元素,繼續判斷兩個數的和 include using namespace std void find int data,int a,...

程式設計之美2 12 快速尋找滿足條件的兩個數

題目 能否快速找出乙個陣列中的兩個數字,讓這兩個數字之和等於乙個給定的值m。解法一 窮舉 o n 2 解法二 先排序,再二分查詢m a i 排序o nlogn 每個數二分查詢o nlgon 總的時間複雜度o nlogn 解法三 hash表,給定乙個數字,根據hash對映查詢另乙個數字是否在陣列中,o...

程式設計之美2 12 快速尋找滿足條件的兩個數

題目 給乙個陣列,求陣列中兩個數字之和等於給定數字的元素 解法1 窮舉法,計算兩兩元素的和是否滿足要求,時間複雜度o n 2 public class main 12 public static void findnum int input,int target else public static...