題目:將乙個有序陣列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...