/*快速尋找滿足條件的兩個數--程式設計之美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...