輸出非減排序陣列旋轉後的最小值

2022-08-10 12:42:21 字數 982 閱讀 4342

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

輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如數

組為的乙個旋轉,該陣列的最小值為1。 note:給出

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

1.遍歷整個陣列,找到最小值,通過比較找到最小值,該方法太蠻力。

2.根據陣列是非減排序陣列旋轉得來,可以在遍歷的時候優化一下,遍歷直到a[i]>a[i+1];此時a[i+1]就是最小值,輸出即可。

3.思路2最好情況遍歷一次,最差情況遍歷n次,我想到一種思路:

假設旋轉後的陣列為array,其最大索引為end,最小值為min,

將陣列按min的左右分為左區和右區,

其中左區滿足兩個條件: array[i] > array[end]    限制了該元素在左邊

array[i] <= array[i + 1] 限制了該元素不是左區的邊界值

其中右區滿足兩個條件: array[i] < array[0]      限制了該元素在右邊

array[i] >= array[i - 1] 限制了該元素不是右區的邊界值

因此除了上述情況就只剩下左區邊界和右區邊界了,就很好得到最小值了。

1

public

class

test6 ;//此處只列舉一種情況為了方便

4int a =minnumberinrotatearray(arr);

5system.out.println(a);6}

78public

static

int minnumberinrotatearray(int

array) else

if (array[i] < array[0] && array[i] >= array[i - 1]) else 23}

24return

a;2526}

27 }

最後一種思路效率較高

尋找旋轉排序陣列中的最小值

假設乙個旋轉排序的陣列其起始位置是未知的 比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2 你需要找到其中最小的元素。你可以假設陣列中不存在重複的元素。public class solution else if num mid 如果陣列中可能存在重複的元素。那麼上面的方法就不能使...

尋找旋轉排序陣列中的最小值

假設乙個旋轉排序的陣列其起始位置是未知的 比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2 你需要找到其中最小的元素。你可以假設陣列中不存在重複的元素。解題思路 陣列中不存在重複的元素 二分法的思想,首先判斷最左邊和最右邊的關係,如果小於就直接返回 如果中間的值大於等於最左邊的值...

尋找旋轉排序陣列中的最小值

今天做了一道演算法題,尋找旋轉排序陣列中的最小值,就是將原來公升序的陣列,以某個點截斷,然後交換這兩段,構成新的陣列,使用二分法在這個新陣列中找最小值,這道題開始想的複雜了,認為這個輸入陣列有4中形況 1 公升序排列,2 降序排列,3 先公升再降,4 先降再公升,然後洋洋灑灑的寫了下面的 int f...