升序排列的整数数组 nums
在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7]
经旋转后可能变为 [4,5,6,7,0,1,2]
)。
请你在数组中搜索 target
,如果数组中存在这个目标值,则返回它的索引,否则返回 -1
。
示例 1:
输入:nums = [4,5,6,7,0,1,2]
, target = 0
输出:4
示例 2:
输入:nums = [4,5,6,7,0,1,2]
, target = 3
输出:-1
示例 3:
输入:nums = [1], target = 0 输出:-1
提示:
1 <= nums.length <= 5000
-10^4 <= nums[i] <= 10^4
nums
中的每个值都 独一无二nums
肯定会在某个点上旋转-10^4 <= target <= 10^4
我的Java代码:
思路:因为是递增数组的旋转数组,可以将数组分成两部分,如果 target 大于第一个元素,那么如果它在数组中,一定在前半部分;相反如果小于第一个元素,如果它在数组中,那么一定在后半部分。因为是递增数组,如果在前半部分发现当前元素已经比 target 大但还没有找到 target ,那么它就不在数组中,返回-1,在后半部分同理。
class Solution {
public int search(int[] nums, int target) {
int len = nums.length;
if(target == nums[0]) {
return 0;
}else if(target > nums[0]) {
for(int i = 1;i < len;i++) {
if(nums[i] > target || nums[i-1] > nums[i]) {
return -1;
}
if(nums[i] == target) {
return i;
}
}
}else {
for(int i = nums.length-1;i > 0;i--) {
if(nums[i] == target) {
return i;
}
if(nums[i] < target ||nums[i-1] > nums[i]) {
return -1;
}
}
}
return -1;
}
}