Files
leetcode/33.search-in-rotated-sorted-array.java
2025-10-28 15:52:13 +08:00

64 lines
1.5 KiB
Java

/*
* @lc app=leetcode id=33 lang=java
*
* [33] Search in Rotated Sorted Array
*/
// @lc code=start
class Solution {
public int search(int[] nums, int target) {
if(nums == null ||nums.length == 0) {
return -1;
}
int r;
if(target >= nums[0]) {
// find in ascending side
r = searchInAscendingSide(nums, target);
} else {
// find in descending side
r = searchInDescendingSide(nums, target);
}
return r;
}
private int searchInAscendingSide(int[] nums, int target) {
int l = 0, r = nums.length-1, m;
while(l<=r) {
m = l + (r-l)/2;
if(nums[m] == target) {
return m;
} else if(!isAscendingSide(m, nums)) {
r = m -1;
} else if(nums[m] < target) {
l = m + 1;
} else {
r = m -1;
}
}
return -1;
}
private int searchInDescendingSide(int[] nums, int target) {
int l = 0, r = nums.length-1, m;
while(l <= r) {
m = l + (r-l)/2;
if(nums[m] == target) {
return m;
} else if(isAscendingSide(m, nums)) {
l = m + 1;
} else if(nums[m] < target) {
l = m + 1;
} else {
r = m - 1;
}
}
return -1;
}
private boolean isAscendingSide(int i, int[] nums) {
return nums[i]>=nums[0];
}
}
// @lc code=end