赞
踩
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。
[left, right]
- class Solution {
- public:
- int search(vector<int>& nums, int target) {
- //作闭右闭[left,right]
- int left = 0;
- int right = nums.size() - 1;
-
- while(left <= right) //因为是左闭右闭,列[1,1],需要包含1,所以边界条件为<=
- {
- int middle = (left + right) / 2;
-
- if(nums[middle] > target)
- {
- right = middle - 1; //因为这是左闭右闭的区间,肯定不包括num[middle],所以right = middle - 1
- }else if(nums[middle] < target)
- {
- left = middle + 1; //同上
- }else
- {
- return middle;
- }
- }
-
- return -1;
- }
- };
[left, right)
- class Solution {
- public:
- int search(vector<int>& nums, int target) {
- //左闭右开
- int left = 0;
- int right = nums.size();
-
- while(left < right)
- {
- int middle = (left + right) / 2;
-
- if(nums[middle] > target)
- {
- right = middle; //因为这是左闭右开的区间,肯定包括num[middle],所以right = middle
- }else if(nums[middle] < target)
- {
- left = middle + 1; //同上
- }else
- {
- return middle;
- }
- }
- return -1;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。