這道題簡單來說就是二分法的乙個變體,但是難點在於異常情況的考慮。
將前面0個數搬到陣列後面,也能稱其為旋轉陣列。
0111陣列的旋轉陣列1011,1101
對於第一種情況,因為旋轉之前,陣列已經是有序的,所以直接輸出第乙個數即可。
對於第二種情況,則只能順序遍歷。
**如下:
public
intfindmin
(int
nums)
// 把第0個資料旋轉到陣列後面
int first =0;
int last = nums.length -1;
int mid = first;
while
(nums[first]
>= nums[last]
)// 針對情況二,只能順序遍歷
if(nums[first]
== nums[last]
&& nums[last]
== nums[mid])if
(nums[mid]
> nums[first]
)else
if(nums[mid]
< nums[last]
) mid =
(last + first)/2
;}return nums[mid];}
private
intmininorder
(int
nums)
}return target;
}
最優情況下時間複雜度o(logn),最差時間複雜度o(n)。 153 尋找旋轉排序陣列中的最小值
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 請找出其中最小的元素。你可以假設陣列中不存在重複元素。示例 1 輸入 3,4,5,1,2 輸出 1 示例 2 輸入 4,5,6,7,0,1,2 輸出 0 思考 這題遍...
153和154 尋找旋轉排序陣列中的最小值
先找到有序的那一部分,然後有序那一部分中最左元素和min作比較。修改範圍,再次查詢。class solution left mid 1 else right mid 1 return min 看到題解的解法很簡潔。再次寫的時候發現體驗不太好。如果只比較兩端是比較不出啥的。如 8 1 2 3 4 8 ...
LeetCode第153題解析
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 請找出其中最小的元素。你可以假設陣列中不存在重複元素。示例 1 輸入 3,4,5,1,2 輸出 1 示例 2 輸入 4,5,6,7,0,1,2 輸出 0 解題思路 r...