整體思路:
將陣列劃分成兩半,分別找出兩邊的最小值與最大值,兩邊區域性最小值中較小的那個為整體最小值,兩邊區域性最大值中較大的為整體的最大值
由於是遞迴實現需要考慮終止條件:當區間容量為2或1時,獲取區域性最小值與最大值
void getmaxmin(vector&a, int left, int right, int &min, int &max)
int mid = (left + right) / 2;
getmaxmin(a, left, mid, min1, max1);
getmaxmin(a, mid+1, right, min2, max2);
min = min1 < min2 ? min1 : min2;
max = max1 > max2 ? max1 : max2;
}
分治法 找最大值與最小值
在20級新生刷題組中我遇到了用分治法求最大值與最小值的演算法題,初看一臉懵,深入 初步的了解中突然發現跟二分法 一次劃分 有著驚人的相似,好吧qaq,其實二分法就是屬於分治法的一種。首先,分治法顧名思義,即為分而治之,把乙個整理的多個資料,分成多塊的少個資料來處理。我們來演示 輸入五個數 9 5 7...
分治法實現尋找陣列最大最小值
我們拿到乙個長度為k的一維陣列,想要在短時間內進行最大最小值的查詢,第一種想法就是現將陣列進行排序,這樣首末的元素分別是最小和最大的元素。排序演算法中,快速排序 歸併排序 堆排序等排序演算法的時間複雜度都是o nlogn 第二種想法就是建立堆,但是需要分別建立最小值堆和最大值堆,我們可以採取第三種做...
2 10 尋找陣列中的最大值與最小值
2.10 尋找陣列中的最大值與最小值 class test print arr findmaxmin arr public static void print int arr 時間複雜度 o n 但是經過了2n次的比較,本題的目的是儘量減少比較次數 public static void findma...