33. Search in Rotated Sorted Array

Suppose an array sorted in ascending order 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).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

 

 

public int search(int[] nums, int target) {
if (nums.length == 0)
return -1;
int minIdx = findMinIdx(nums); //先找出最小值的索引
if (target == nums[minIdx])
return minIdx;
int m = nums.length;
int start = (target > nums[m - 1]) ? 0 : minIdx;
int end = (target > nums[m - 1]) ? minIdx - 1 : m - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (nums[mid] == target)
return mid;
else if (target > nums[mid])
start = mid + 1;
else
end = mid - 1;
}
return -1;
}
public int findMinIdx(int[] array) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (array[mid] > array[high])
low = mid + 1;
else if (array[mid] == array[high])
high = high - 1;
else
high = mid;
}
return low;
}
 
posted @   MarkLeeBYR  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示