diff --git a/153FindMinimumInRotatedSortedArray.js b/153FindMinimumInRotatedSortedArray.js new file mode 100644 index 00000000..24ab291c --- /dev/null +++ b/153FindMinimumInRotatedSortedArray.js @@ -0,0 +1,20 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var findMin = function (nums) { + let left = 0, + right = nums.length - 1; + + while (left < right) { + let mid = (left + right) >>> 1; + + if (nums[mid] > nums[right]) { + left = mid + 1; + } else { + right = mid; + } + } + + return nums[left]; +}; diff --git a/162FindPeakElement.js b/162FindPeakElement.js new file mode 100644 index 00000000..431da029 --- /dev/null +++ b/162FindPeakElement.js @@ -0,0 +1,18 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var findPeakElement = function (nums) { + let lo = 0, + hi = nums.length - 1; + + while (lo < hi) { + let mid = lo + ((hi - lo) >>> 1); + if (nums[mid] < nums[mid + 1]) { + lo = mid + 1; + } else { + hi = mid; + } + } + return lo; +}; diff --git a/34FindFirstAndLastPositionOfElementInSortedArray.js b/34FindFirstAndLastPositionOfElementInSortedArray.js new file mode 100644 index 00000000..5f53e5b6 --- /dev/null +++ b/34FindFirstAndLastPositionOfElementInSortedArray.js @@ -0,0 +1,33 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var searchRange = function (nums, target) { + if (nums.length === 0) return [-1, -1]; + + function findFirst() { + let lo = 0, + hi = nums.length - 1; + + while (lo < hi) { + const mid = lo + ((hi - lo) >> 1); // floor + if (target <= nums[mid]) hi = mid; + else lo = mid + 1; + } + return nums[lo] === target ? lo : -1; + } + + function findSecond() { + let lo = 0, + hi = nums.length - 1; + + while (lo < hi) { + const mid = lo + ((hi - lo + 1) >> 1); // ceil + if (target >= nums[mid]) lo = mid; + else hi = mid - 1; + } + return nums[lo] === target ? lo : -1; + } + return [findFirst(), findSecond()]; +};