尋找旋轉陣列中的最小值

2021-07-26 10:08:33 字數 1139 閱讀 6704

假設乙個旋轉排序的陣列其起始位置是未知的(比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2)。

你需要找到其中最小的元素。

你可以假設陣列中不存在重複的元素。

分析:尋找陣列中某一類特定的值,很容易聯想到二分法。本題中陣列是旋轉的,而且是排序的,還是比較有規律,可以分情況討論mid的落點情況:

public

int findmin(int nums)

int start = 0;

int end = nums.length - 1;

while (start + 1

< end)

int mid = start + (end - start) / 2;

if (!increase(nums, mid)) else

if (nums[mid] > nums[start]) else

}if (nums[start] < nums[end])

if (nums[start] > nums[end])

}//判斷mid是否為遞增,在本題中使用此函式不需擔心下標越界的情況,while的迴圈條件 start + 1 < end 已經保證mid前後必須有值。

private

boolean increase(int nums, int

index) else

}

以上雖然是每次將區間縮小一半,但是判斷過於複雜,不同於以往二分法比較時存在乙個target,接下來引入固定target的思路來解題。

public

intfindmin(int nums)

int start = 0;

int end = nums.length - 1;

int target = nums[nums.length - 1];//此處將target定位陣列中的最後乙個元素,而不能選擇陣列首個元素,因為陣列是公升序、旋轉時的判斷條件不相符。

while (start + 1

< end) else

if (nums[mid] < target) else

}if (nums[start] < nums[end]) else

}

尋找旋轉陣列的最小值

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1。這道題的要求是尋找最小值,附加的條件是給出了兩個有序的陣列。如果旋轉的數字個數大於0 可...

旋轉陣列的最小值

題目 把乙個陣列的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小值。例如陣列為的乙個旋轉,該陣列的最小值為1。解析 1 我們可以用順序查詢的方法找到陣列中的最小值,但是這個方法沒有用到旋轉陣列區域性有序的特點。2 和二分查詢法一樣,我們用兩個指標...

旋轉陣列的最小值

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 類似二分查詢,不斷縮小查詢範圍 int minnumberinro...