mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
77 lines
1.8 KiB
Plaintext
77 lines
1.8 KiB
Plaintext
---
|
|
title: '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
|
|
sidebar:
|
|
label: 'Binary Search'
|
|
badge: 'Easy'
|
|
---
|
|
|
|
<Badge variant="accent">Array</Badge>
|
|
|
|
::::warning
|
|
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 <= 10^4`
|
|
- `-10^4 < nums[i], target < 10^4`
|
|
- All the integers in `nums` are unique.
|
|
- `nums` is sorted in ascending order.
|
|
|
|
## Approach
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
S(["search(nums, target)"]) --> I["left = 0, right = n - 1"]
|
|
I --> W{"left <= right?"}
|
|
W -- no --> E(["return -1"])
|
|
W -- yes --> M["mid = left + floor((right - left) / 2)"]
|
|
M --> Q{"nums[mid] vs target"}
|
|
Q -- equal --> R(["return mid"])
|
|
Q -- "nums[mid] < target" --> L["left = mid + 1"]
|
|
L --> W
|
|
Q -- "nums[mid] > target" --> H["right = mid - 1"]
|
|
H --> W
|
|
```
|
|
|
|
## Solution
|
|
|
|
```js
|
|
/**
|
|
* @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 + Math.floor((right - left) / 2);
|
|
if (nums[mid] === target) {
|
|
return mid;
|
|
} else if(nums[mid] < target){
|
|
left = mid + 1;
|
|
} else if (nums[mid] > target) {
|
|
right = mid - 1;
|
|
}
|
|
}
|
|
return -1;
|
|
};
|
|
```
|
|
|
|
## Explanation
|
|
|
|
<YouTube id="s4DPM8ct1pI" title="Binary Search - Leetcode 704 - Python" />
|