【LeetCode-面試演算法經典-Java實現】【153-Find Minimum in Rotated Sorted Array(找旋轉陣列中的最小數字)】
阿新 • • 發佈:2018-12-27
原題
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Find the minimum element.
You may assume no duplicate exists in the array.
題目大意
假設一個排序的陣列以事先未知的某個中樞進行了旋轉。
即,0 1 2 4 5 6 7可能成為4 5 6 7 0 1 2)。
找到最小的元素。
你可以假設不存在重複的陣列中。
解題思路
二分搜尋法,陣列分為兩個有序的部分,前一個部分和後一個部分並且前一個排序部分元素都比後一個元素大隻要找到後一個元素比前一個大就是要找的元素
程式碼實現
演算法實現類
public class Solution {
public int findMin(int[] nums) {
// 引數檢驗
if (nums == null || nums.length < 0) {
throw new IllegalArgumentException();
}
return binarySearch(nums, 0, nums.length - 1);
}
public int binarySearch(int[] nums, int start, int end) {
int mid = 0;
while (start < end) {
mid = start + ((end - start) >> 1);
// 後一個數比前個數小就找到了
if (nums[mid]> nums[mid + 1]) {
return nums[mid + 1];
}
// 說明中間值在第一個有序的陣列中
else if (nums[mid] > nums[start]) {
start = mid;
}
// 說明中間值在第二個有序的陣列中
else {
end = mid;
}
}
// 說明整個陣列是有序的
return nums[0];
}
}
評測結果
點選圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中檢視完整圖片。