二分查找
给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1整理题目要求:1、一个数组,其内元素升序,无重复数字
2、给出一个target,要求再这个数组中找到这个数,返回所在位置
3、如果数组中不存在这个数,返回-1
https://static.52pojie.cn/static/image/hrline/1.gifhttps://static.52pojie.cn/static/image/hrline/1.gif
思路一:在一个 元素有序无重复 的数组中 查找指定的值,满足二分查找思路二:for循环,一个一个对比。如果这个数比较靠后或不存在,效率低https://static.52pojie.cn/static/image/hrline/1.gifhttps://static.52pojie.cn/static/image/hrline/1.gif public int search (int[] nums, int target) {
//定义开始和结尾
int start =0;
int end =nums.length-1;
while(start <= end){
//存放中值
int modle = (start+end)/2;
if(nums==target){
return modle;
}else if(nums > target){
//中间值 > 目标值, 缩小范围,end应该是原中值前一个值
end = modle-1;
}else{
//中间值 < 目标值, 缩小范围,start应该是原中值后一个值
start = modle+1;
}
}
//循环结束还没找到,说明没有这个数,返回-1
return -1;
}
坐等思路二 二分变种:找山峰,无重复环型数组找最值,有重复环形数组找最值,等等 为什么变量名是modle,中值用mid更容易理解吧。 没啥意义,数据排序都老半天,二叉树完爆 可以再讲讲那些左边界和右边界的,统一一下框架更好了。
页:
[1]