Find minimum in a rotated sorted array:
class Solution {
public int findMin(int[] A) {
If (A == null || A.length == 0) { return Integer.MIN_VALUE; }
int start = 0;
int end = A.length -1;
while (start < end) {
int mid = (start + end) / 2;
// check monotonically increasing series
if (A[start] <= A[end] && A[start] <= A[mid] && A[mid] <= A[end]]) { return A[start];};
// check if only [start, end]
if (mid == start || mid == end) { if (A[start] < A[end]) return A[start]; else return A[end];}
// detect rotation point
if (A[start] > A[mid]){
end = mid;
} else {
if (A[mid] > A[mid+1]) return A[mid+1];
start = mid + 1;
}
}
return A[0];
}
}
Works for:
[0 1 4 4 5 6 7]
[7 0 1 4 4 5 6]
[6 7 0 1 4 4 5]
[5 6 7 0 1 4 4]
[4 5 6 7 0 1 4]
[4 4 5 6 7 0 1]
[1 4 4 5 6 7 0]
[1 0 0 0 0 0 1]
No comments:
Post a Comment