要求比較次數小於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...