## [704\. Binary Search](https://leetcode.com/problems/binary-search/) 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. ```cpp= class Solution { public: int search(vector<int>& nums, int target) { // [左邊界, 右邊界] = [0, n - 1] int left = 0, right = nums.size() - 1; while(left <= right) { int mid = left + (right - left) / 2; if(nums[mid] == target) { return mid; // 當 nums[mid] 比 target 小的時候,代表搜尋的值在右側,所以 ++left } else if(nums[mid] < target) { ++left; // 當 nums[mid] 比 target 大的時候,代表搜尋的值在左側,所以 --right } else { --right; } } return -1; } }; ```