陣列 尋找和為定值的兩個數

2021-07-11 17:58:23 字數 1480 閱讀 8651

題目描述:

給定乙個陣列和乙個整數,要求在陣列中找到兩個數,使得它們的和為這個整數.

方法:排序夾逼

首先使用快速排序演算法把陣列按公升序排列,然後使用夾逼的方法找到答案.即使用兩個指標分別指向陣列的頭和尾(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 然後用...