当前位置: 首页 > article >正文

【java】实战-力扣题库:二分查找

$ 问题:

        给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

$ 原理

 

一个有序数组,

定义两个指针,left表示开始,right表示结束。

 

和mid作比较,比mid小,进入左半部分;比mid大,进入右半部分。

左半部分: left不变, right变为mid-1。

右半部分: right不变, left变为 mid+1.


java代码实现:

class Solution {
    public int search(int[] nums, int target) {
        int left=0;
        int right=nums.length-1;
        while(right>=left){
            int mid=(left+right)/2;
            if(target==nums[mid]){
                //找到
                return mid;
            }else if(target>nums[mid]){
                left=mid+1;
            }else{
                right=mid-1;
            }

        }
        return -1;

    }
}

当下没问题,后续会有问题。

while(left<right){
    left=mid
    right=mid+1
}

若left=mid 或right=mid,可能会出现死循环。

例:查找12.5

陷入死循环,left一直等于5,mid一直等于5.

或者:

这种也不行,当查找18时,left==right时应该是找到了,但是跳出循环了。

实际上:

可以这样:

while(left<right){
       left=mid+1;

        right=mid;
}


http://www.kler.cn/a/383719.html

相关文章:

  • 分布式和微服务的区别
  • 双指针算法篇——一快一慢须臾之间解决问题的飘逸与灵动(3)
  • 一台工控机出现C++工程线程卡住问题的排查
  • 【Linux】Linux下查看cpu信息指令(top/mpstat/iostat/pidstat)说明
  • csrf令牌
  • 【前端知识】es6基础语法介绍
  • 首都师范大学地信GIS导师推荐(避坑)
  • 从 vue 源码看问题 — 如何理解 vue 响应式?
  • 【贪心算法】No.1---贪心算法(1)
  • 量子电路的实现 基于ibm的qiskit
  • 基于MySQL的企业专利数据高效查询与统计实现
  • 【日记】跟人沟通有时真的好头疼(688 字)
  • 年入百万:从初中辍学到 50 万读者!
  • npm i忽略依赖冲突
  • Java | Leetcode Java题解之第541题反转字符串II
  • 国产linux系统openeuler24.03安装gnome桌面环境后优化
  • 【MissModal】提高多模态情感分析对缺失情态的鲁棒性
  • 网络安全从入门到精通(特别篇I):应急响应之APT事件处置流程
  • android10 蓝牙(一)开关与扫描源码解析
  • STM32Cube高效开发教程<高级篇><FreeRTOS>(十二)-----互斥量使用例程
  • Java学习Day58:相声二人组!(项目统计数据Excel图表导出)
  • 前端八股文(一)HTML 持续更新中。。。
  • 如何用PPT画箭头?用这2个ppt软件快速完成绘图!
  • 文件操作:Xml转Excel
  • Git代码托管(三)可视化工具操作(1)
  • 最全的Flutter中pubspec.yaml及其yaml 语法的使用说明