dxxbjl 发表于 2023-3-30 11:36

二分查找

给定一个 元素升序的、无重复数字的整型数组 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;
    }

luke88715 发表于 2023-3-30 12:05

坐等思路二

熊猫拍板砖 发表于 2023-3-30 12:42

二分变种:找山峰,无重复环型数组找最值,有重复环形数组找最值,等等

WuYule 发表于 2023-3-30 13:04

为什么变量名是modle,中值用mid更容易理解吧。

JuncoJet 发表于 2023-3-30 14:40

没啥意义,数据排序都老半天,二叉树完爆

starkcccc 发表于 2023-4-3 12:43

可以再讲讲那些左边界和右边界的,统一一下框架更好了。
页: [1]
查看完整版本: 二分查找