演算法學習十五 找陣列最大值和最小值

2021-06-21 14:57:18 字數 1997 閱讀 3931

題目:給定乙個陣列,找出陣列中的最大值和最小值

演算法思路一:使用兩個「游標」,p代表最大值,q代表最小值,初始為陣列的第乙個和第二個,不斷向後移並且做比較,每次移動時將較大值與p比較,將p賦為較大值,較小值也同理。這樣就能找到最大值和最小值。此演算法要注意的地方就是當陣列只有乙個元素以及陣列的個數為奇數個時要做另外的處理

演算法偽**如下:

if array.size = 1

then max = min = array[0]

max = max(arr[0], arr[1]), min = min(arr[0], arr[1])

for i <- 0 to size j <- i+1 to size

if max < max(arr[i], arr[j])

then max = maxone

if min > min(arr[i], arr[j])

then min = minone

if size is not even

then compare max and min with last element

got max and min

c++實現:

//solution 1

template void findmaxmin(t *arr, int size)

//max = max(arr[0], arr[1]), min = min(arr[0], arr[1])

max = max(arr[0], arr[1]);

min = min(arr[0], arr[1]);

//for i <- 0 to size j <- i+1 to size

for(int i = 0, j = i+1; i != size && j != size; ++i, ++j)

//if min > min(arr[i], arr[j])

if(min > min(arr[i], arr[j]))

}//if size is not even

if(size%2 != 0)

if(min > arr[size-1])

}//got max and min

cout << "max : " << max << " min : " << min << endl;

}

演算法思路二:

採用分治的方法,先計算得到前後n/2個數的最大和最小值,再將n/2個數劃分為兩個陣列分別求兩個陣列的最大值和最小值,以此類推,最後可以得到整個陣列的最大值和最小值。

演算法偽**如下:

if remain 2 element or one element

then max = maxone, min = minone

findmaxmin in 2 size/2 counts'array recursionly

max = maxone, min = minone

c++實現:

template numberpairfindmaxmin(t * arr, int begin, int end)

else

}//findmaxmin in 2 size/2 counts'array recursionly

numberpairl = findmaxmin(arr, begin, begin + (end-begin) / 2);

numberpairr = findmaxmin(arr, begin + (end-begin) / 2 + 1, end);

//max = maxone, min = minone

numberpairresult;

result.max = max(l.max, r.max);

result.min = min(l.min, r.min);

return result;

}

通過for迴圈找陣列中的最大值和最小值

通過for迴圈找到一組數中的最大值和最小值,這裡有個小技巧,可以通過建立乙個變數並把陣列 0 位賦給建立的變數,通過賦值的變數和陣列比大小做對比 通過if判斷就找出我們想要的值了。建立陣列並賦值 var strnum 156,20 123 456 1231 4856,12 通過獲取陣列變數和原來的陣...

演算法學習之禮物的最大值

題目 在乙個m n的棋盤的每一格都放有乙個禮物,每個禮物都有一定的價值 價值大於0 你可以從棋盤的左上角開始拿格仔裡的禮物,並每次向右或者向下移動一格,直到到達棋盤的右下角。給定乙個棋盤及其上面的禮物,請計算你最多能拿到多少價值的禮物?例如,在下面的棋盤中,如果沿著加粗的數字的線路 1 12 5 7...

分治法 找最大值與最小值

在20級新生刷題組中我遇到了用分治法求最大值與最小值的演算法題,初看一臉懵,深入 初步的了解中突然發現跟二分法 一次劃分 有著驚人的相似,好吧qaq,其實二分法就是屬於分治法的一種。首先,分治法顧名思義,即為分而治之,把乙個整理的多個資料,分成多塊的少個資料來處理。我們來演示 輸入五個數 9 5 7...