把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。
輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如數
組為的乙個旋轉,該陣列的最小值為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] 限制了該元素不是右區的邊界值
因此除了上述情況就只剩下左區邊界和右區邊界了,就很好得到最小值了。
1public
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...