Welcome to Subscribe On Youtube
704. Binary Search
Description
Given an array of integers nums
which is sorted in ascending order, and an integer target
, write a function to search target
in nums
. If target
exists, then return its index. Otherwise, return -1
.
You must write an algorithm with O(log n)
runtime complexity.
Example 1:
Input: nums = [-1,0,3,5,9,12], target = 9 Output: 4 Explanation: 9 exists in nums and its index is 4
Example 2:
Input: nums = [-1,0,3,5,9,12], target = 2 Output: -1 Explanation: 2 does not exist in nums so return -1
Constraints:
1 <= nums.length <= 104
-104 < nums[i], target < 104
- All the integers in
nums
are unique. nums
is sorted in ascending order.
Solutions
-
class Solution { public int search(int[] nums, int target) { int left = 0, right = nums.length - 1; while (left < right) { int mid = (left + right) >> 1; if (nums[mid] >= target) { right = mid; } else { left = mid + 1; } } return nums[left] == target ? left : -1; } }
-
class Solution { public: int search(vector<int>& nums, int target) { int left = 0, right = nums.size() - 1; while (left < right) { int mid = left + right >> 1; if (nums[mid] >= target) right = mid; else left = mid + 1; } return nums[left] == target ? left : -1; } };
-
class Solution: def search(self, nums: List[int], target: int) -> int: left, right = 0, len(nums) - 1 while left < right: mid = (left + right) >> 1 if nums[mid] >= target: right = mid else: left = mid + 1 return left if nums[left] == target else -1
-
func search(nums []int, target int) int { left, right := 0, len(nums)-1 for left < right { mid := (left + right) >> 1 if nums[mid] >= target { right = mid } else { left = mid + 1 } } if nums[left] == target { return left } return -1 }
-
/** * @param {number[]} nums * @param {number} target * @return {number} */ var search = function (nums, target) { let left = 0; let right = nums.length - 1; while (left < right) { const mid = (left + right) >> 1; if (nums[mid] >= target) { right = mid; } else { left = mid + 1; } } return nums[left] == target ? left : -1; };
-
use std::cmp::Ordering; impl Solution { pub fn search(nums: Vec<i32>, target: i32) -> i32 { let mut l = 0; let mut r = nums.len(); while l < r { let mid = (l + r) >> 1; match nums[mid].cmp(&target) { Ordering::Less => { l = mid + 1; } Ordering::Greater => { r = mid; } Ordering::Equal => { return mid as i32; } } } -1 } }
-
public class Solution { public int Search(int[] nums, int target) { int left = 0, right = nums.Length - 1; while (left < right) { int mid = (left + right) >> 1; if (nums[mid] >= target) { right = mid; } else { left = mid + 1; } } return nums[left] == target ? left : -1; } }
-
function search(nums: number[], target: number): number { let [l, r] = [0, nums.length - 1]; while (l < r) { const mid = (l + r) >> 1; if (nums[mid] >= target) { r = mid; } else { l = mid + 1; } } return nums[l] === target ? l : -1; }