題目描述:
給定乙個陣列和乙個整數,要求在陣列中找到兩個數,使得它們的和為這個整數.
方法:排序夾逼
首先使用快速排序演算法把陣列按公升序排列,然後使用夾逼的方法找到答案.即使用兩個指標分別指向陣列的頭和尾(begin, end).
1. 若arr[begin] + arr[end] == sum 就輸出;
2. 若arr[begin] + arr[end] < sum 代表兩數的和偏小需要增大,則begin++;
3. 若arr[begin] + arr[end] > sum 代表兩數之和偏大需要減小,則end–;
#include
using namespace std;
#define min 5
void quicksort(int
*arr, int first, int
last);
int partition(int
*arr, int first, int
last);
void insertsort(int
*arr, int first, int
last);
void sortfirstmidlast(int
*arr, int first, int mid, int
last);
void twosum(int
*arr, int
length, int sum);
int main()
; quicksort(array, 0, sizeof(array)/sizeof(int) - 1);
twosum(array, sizeof(array)/sizeof(int), 0);
return0;}
void quicksort(int
*arr, int first, int
last)
else
}void insertsort(int
*arr, int first, int
last)
arr[local] = tmp;
}}int partition(int
*arr, int first, int
last)
else
}swap(arr[index], arr[leftindex]);
index = leftindex;
return
index;
}void sortfirstmidlast(int
*arr, int first, int mid, int
last)
void twosum(int
*arr, int
length, int sum)
else
if(arr[begin] + arr[end] < sum)
else
}}
尋找和為定值的兩個數
尋找和為定值的兩個數 給定乙個陣列 無序或者有序,兩種情況都要考慮 找出和為m的兩個數。最多時間複雜度能有多少?陣列有序的情況,在時間複雜度上我們就省去了排序的o nlogn 我們使用兩端指標掃瞄法是比較簡單的,時間複雜度為o n 空間複雜度為o 1 如下圖所示 然後,判斷它們指向的值之和sum是否...
尋找和為定值的兩個數
描述 輸入乙個陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。分析 如果採取窮舉,複雜度為o n 2 可以換乙個思...
尋找和為定值的兩個數
題目 輸入乙個陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。解析 如果陣列是無序的,先排序 n logn 然後用...