feat: 2025-10-28打卡
This commit is contained in:
63
33.search-in-rotated-sorted-array.java
Normal file
63
33.search-in-rotated-sorted-array.java
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* @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
|
||||
|
||||
Reference in New Issue
Block a user