無序陣列中求最大值最小值

2021-10-09 09:33:43 字數 812 閱讀 5397

要求比較次數小於2n。

最直接的做法,比較次數為2n:

#include using namespace std;

int main()

cout << min_val << " " << max_val << endl;

return 0;

}

如果要減少比較次數,應該怎麼做呢?

當某個元素比較大元素大的時候,就不必再與較小元素比較了:

int main()

cout << min_val << " " << max_val << endl;

return 0;

}

這樣比較次數就會小於2n。那還有更好的方法嗎?

可以分治:先讓相鄰的兩個數進行比較,較大者放在右邊(奇數下標),較小者放在左邊(偶數下標),比較次數n/2。這樣全域性的最大值肯定在偶數下標,最小值肯定在奇數下標,分別尋找最值,比較次數為n/2 + n/2 = n,所以最終比較次數1.5n。

int main()

int min_val = a[0];

for(int i = 2; i < n; i += 2)

int max_val = a[1];

for(int i = 3; i < n; i += 2)

if(n%2)

cout << min_val << " " << max_val << endl;

return 0;

}

這種題你說它難吧,也不難,思想很簡單,但是就是不一定能想出來,很巧

python陣列求最大值最小值

剛剛面試被問到不用max函式怎麼求最大值,記錄一下 a 1 3,5 7,4 4,3 1,0 第一種方法 我們可以直接排序,取最後乙個 a.sort reverse false print a 1 第二種 我們定義第乙個元素 然後for迴圈比較 max num a 0 for i in range l...

C PTA 求最大值最小值

用指標作函式引數,程式設計序求一維陣列中的最大和最小的元素值。函式介面定義 void maxmin int arr,int pt1,int pt2,int n 其中 arr pt1 pt2 n都是使用者傳入的引數,n為元素個數。函式求指標arr所指向的一維陣列中的最大和最小的元素值,並將最大值和最小...

vector或陣列求最大值 最小值

可以用max element 及min element 函式,二者返回的都是迭代器或指標。標頭檔案 include 1.求陣列的最大值或最小值 1 vector容器 例 vector vec 最大值 int maxvalue max element v.begin v.end 最小值 int min...