Java求旋轉陣列的最小值

2021-07-27 10:14:00 字數 1408 閱讀 4499

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如陣列為的乙個旋轉,該陣列的最小值為1。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

可以借助二分查詢法的思想。

/**

*@author 16026

* */

public

class

min

mid = (start + end) >> 1;//除以2操作

if (array[mid] >= array[start])

start = mid;

else

if (array[mid] <= array[end])

end = mid;

}return array[mid];}/*

* 以上方法也有缺陷,如的乙個旋轉陣列,以上方法便無法得出最小值。

* bug出現在while迴圈的第二個if語句。 當start、mid、end三個下標對應的值相等時,便需要單獨判斷。

*//** * 改進後的方法

*@param array

*@return

*/public

static

intmin2(int array)

mid = (start + end) >> 1;

if(array[start] == array[mid] && array[mid] == array[end])

if (array[mid] >= array[start])

start = mid;

else

if (array[mid] <= array[end])

end = mid;

}return array[mid];

}/**

* 求乙個整型陣列裡面的最小值

*@param array

*@param start

*@param end

*@return

*/private

static

intmininarray(int array, int start, int end)

return result;

}public

static

void

main(string args);

system.out.println(min(array));

system.out.println(min2(array));}}

執行結果為:

旋轉陣列求最小值

這是letcode上的一道題目 leetcode find minimum in rotated sorted array 一 什麼是旋轉陣列呢,就是乙個有序的陣列,在從某乙個位置開始,旋轉到陣列的另一端,例如 0 1 2 3 4 5 6 4 5 6 0 1 2 3 二 使用暴力的方式就是遍歷這個陣...

求旋轉陣列的最小值

思路 基本方法 從頭遍歷一遍,時間複雜度為o n 效率比較低,這裡採用二分查詢,找出中間元素與頭,尾比較,如果中間元素比頭元素大,說明這部分有序,最小值在後半部分,中間元素為頭 如果中間元素比尾元素大,說明最小值在前部分。設定兩個指標start和end分別指向陣列的首尾元素,然後當start指向前半...

求旋轉陣列後的最小值

乙個有序陣列,將前面的一段放在陣列的後面就被稱之為旋轉。比如 1,2,3,4,5,6 就可以旋轉為 5,6,1,2,3,4 輸入乙個旋轉後的陣列,輸出陣列中的最小值。直接遍歷的時間複雜度是o n 接下來介紹並實現乙個o log n 的演算法。以 50,10,20,30,40 為例 下標 first ...