mirror of
https://github.com/prdlk/leetcode.git
synced 2026-09-16 23:16:26 +00:00
feat(problems): add solutions for Search in Rotated Sorted Array and Koko Eating Bananas
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* 33. Search in Rotated Sorted Array
|
||||
* Difficulty: Medium
|
||||
* https://leetcode.com/problems/search-in-rotated-sorted-array/
|
||||
*
|
||||
* ──────────────────────────────────────────────────
|
||||
*
|
||||
* There is an integer array nums sorted in ascending order (with
|
||||
* distinct values).
|
||||
*
|
||||
* Prior to being passed to your function, nums is possibly left rotated
|
||||
* at an unknown 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 left
|
||||
* rotated by 3 indices 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
|
||||
*
|
||||
* • -10^4 <= nums[i] <= 10^4
|
||||
*
|
||||
* • All values of nums are unique.
|
||||
*
|
||||
* • nums is an ascending array that is possibly rotated.
|
||||
*
|
||||
* • -10^4 <= target <= 10^4
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param {number[]} nums
|
||||
* @param {number} target
|
||||
* @return {number}
|
||||
*/
|
||||
var search = function(nums, target) {
|
||||
let l = 0, r = nums.length - 1;
|
||||
|
||||
while (l <= r){
|
||||
let mid = Math.floor((l + r)/2);
|
||||
if (target === nums[mid]) {
|
||||
return mid
|
||||
}
|
||||
|
||||
// Left sorted portion
|
||||
if (nums[l] <= nums[mid]){
|
||||
if (target > nums[mid] || target < nums[l]){
|
||||
l = mid + 1;
|
||||
}else{
|
||||
r = mid - 1;
|
||||
}
|
||||
}
|
||||
// Right sorted portion
|
||||
else{
|
||||
if(target < nums[mid] || target > nums[r]){
|
||||
r = mid - 1;
|
||||
}else{
|
||||
l = mid + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
Reference in New Issue
Block a user