Class Solution
Medium
There is an integer array nums sorted in ascending order (with distinct values).
Prior to being passed to your function, nums is possibly rotated at an unknown pivot index k (1 <= k < nums.length) such that the resulting array is [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] ( 0-indexed ). For example, [0,1,2,4,5,6,7] might be rotated at pivot index 3 and become [4,5,6,7,0,1,2].
Given the array nums after the possible rotation and an integer target, return the index of target if it is in nums, or -1 if it is not in nums.
You must write an algorithm with O(log n) runtime complexity.
Example 1:
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
Example 2:
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
Example 3:
Input: nums = [1], target = 0
Output: -1
Constraints:
1 <= nums.length <= 5000-104 <= nums[i] <= 104- All values of
numsare unique. numsis an ascending array that is possibly rotated.-104 <= target <= 104
To solve the “Search in Rotated Sorted Array” problem in Java with a Solution class, we can follow these steps:
- Define a
Solutionclass. - Define a method named
searchthat takes an integer arraynumsand an integertargetas input and returns an integer representing the index oftargetinnums. Iftargetis not found, return-1. - Implement the binary search algorithm to find the index of
targetin the rotated sorted array. - Set the left pointer
leftto 0 and the right pointerrightto the length ofnumsminus 1. - While
leftis less than or equal toright:- Calculate the middle index
midas(left + right) / 2. - If
nums[mid]is equal totarget, returnmid. - Check if the left half of the array (
nums[left]tonums[mid]) is sorted:- If
nums[left] <= nums[mid]andnums[left] <= target < nums[mid], updateright = mid - 1. - Otherwise, update
left = mid + 1.
- If
- Otherwise, check if the right half of the array (
nums[mid]tonums[right]) is sorted:- If
nums[mid] <= nums[right]andnums[mid] < target <= nums[right], updateleft = mid + 1. - Otherwise, update
right = mid - 1.
- If
- Calculate the middle index
- If
targetis not found, return-1.
Here’s the implementation:
public class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
}
if (nums[left] <= nums[mid]) {
if (nums[left] <= target && target < nums[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
} else {
if (nums[mid] < target && target <= nums[right]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}
return -1;
}
}
This implementation provides a solution to the “Search in Rotated Sorted Array” problem in Java. It searches for the index of target in the rotated sorted array nums. The algorithm has a time complexity of O(log n).
-
Constructor Summary
Constructors -
Method Summary
-
Constructor Details
-
Solution
public Solution()
-
-
Method Details
-
search
public int search(int[] nums, int target)
-