找出區域性有序陣列的最大值

2021-07-11 10:08:06 字數 1000 閱讀 4329

題目:將乙個有序陣列arr[n]的前面一段arr[0…..k]移動到陣列的末尾,找出新陣列的最大值。比如:

int arr1 = ;

int arr2 = ;

int arr3 = ;

int arr4 = ;

int arr5 = ;

int arr6 = ;

arr1是乙個有序陣列,arr2~arr6是經過變化的新陣列,找出新陣列中的最大值.

這個題目比較簡單最直接的方法就是一次比較,遍歷整個陣列,就找出最大的了,複雜度o(n)。

這裡要討論的是找出複雜度為o(logn)的實現。

1. 利用遞迴實現整個演算法,大致的思想如下:

找到陣列的中間位置mid的值, 將arr[mid]和陣列的兩端進行比較;如果arr[mid] 比兩端的值都大,就將陣列的前半段捨棄,後半部分進行遞迴;如果arr[mid]比某一點的值小,就將後半部分捨棄,將前半部分進行遞迴;直到限定範圍內的數只有乙個的時候,那麼它就是最大值,返回。

非遞迴實現,由遞迴實現轉換而來,**如下:

/**

*查詢部分有序陣列的最大值

*/public

static

intfindmaxofarray(int arr)

//捨棄後半部分

else

if(arr[mid] < arr[i] && arr[mid] < arr[j])

if(mid == (i+j)/2)

break;

mid = (i+j)/2;

}if(arr[i] > arr[j])

max = arr[i];

else

max = arr[j];

return max;

}

上述**中的 i , j 是陣列的新的查詢範圍,直到 i 和 j 相鄰時跳出,因為陣列大小可能有奇數也可能為偶數, 所以最終保留i 和 j,其中較大的應該就是整個陣列的最大值了。

找出陣列中的最大值和次大值

給定乙個含有n個元素的整型陣列,求其最大值和次大值 思想和上一題類似,同樣是用分治法,先求出左邊的最大值leftmax和次大值leftsecond,再求出右邊的最大值rightmax和次大值rightsecond,然後合併,如何合併呢?分情況考慮 1 如果leftmax rightmax,那麼可以肯...

shell 找出陣列元素中的最大值

shell 如何比較出陣列中所有元素中的最大值?如 array 111 222 333 444 555 999 888 777 666 怎麼找出最大的那個元素999呢?思路 先設定乙個值max 即陣列的第乙個元素,再使用for迴圈,拿第乙個元素與第二個.比較,當有乙個元素比如3號元素比array 0...

最大值 python找出幾個數最大值的方法

python找出幾個數中最大值的方法 1 簡單的使用if else進行判斷 list 12,34,2,0,1 max list 0 定義變數max用來儲存最大值,初始值賦值為列表中任意乙個值 for i in list if i max max i print 這個列表中最大值為 max 2 使用m...