二分查找(思路+实现细节+动画演示,看不懂直接喷)

题目

在这里插入 描述

①二分查找(条件+思路)

 条件:
 被查找的序列是有序的。(升序、降序),而本题是升序的
 大致思路:
 用 left 、 right 两个游标指针维护整个序列。折中查找,折中的位置 (left+right)/2,
 记作mid。比较nums[mid]与target的大小关系(三种关系:大于,小于,等于),等于时return mid。
 详细思路的分析:
 分析大于和小于。(等于的情况在上面说了,直接return,注意题目要求返回下标)
 前面提过,是使用left和right游标维护整个序列,所以变动的是left和right游标!
 只有三个变量,所以是分析left,mid,right。
   
   1、小于时:
   nums[mid]<target。说明left与right折中的结果太小了,应该让left所代表的值变大,
   因为nums序列是升序,所以left要在mid的位置上右移。(如果是降序,就是right在mid位置左移)
   结果就是:
   left = mid+1;//nums升序
   
   2、大于时:
   分析情况也同理就不赘述,给出结论
   nums序列升序,
	right = mid-1;//nums//升序1

动画简单演示:

二分查找

②代码展示(C++11版本)


class Solution {
public:
    int search(vector<int>& nums, int target)
    {
    	int left = 0;
    	int right = nums.size()-1;
    	
    	while(left<=right){
    		int mid = (left+right)/2;
    		
    		if(nums[mid]<target){
				left = mid+1;
			}
			else if(nums[mid]>target){
				right = mid-1;
			}
			else{
				return mid;
			}
			
		}
		return -1;
		
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值