【算法】二分查找(一)朴素二分

【算法】二分查找(一)朴素二分

目录

一、题目介绍

二、朴素二分

1.原理

二段性

时间复杂度(logn)

2.模板

四、提交代码


一、题目介绍

704. 二分查找 - 力扣(LeetCode)

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

你必须编写一个具有 O(log n) 时间复杂度的算法。


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假设 nums 中的所有元素是不重复的。
  2. n 将在 [1, 10000]之间。
  3. nums 的每个元素都将在 [-9999, 9999]之间。

二、朴素二分

1.原理二段性

二段性 一次算可排一边 每次在中间 固定算排二分之一暴力 是 纯用算来排,一次算 就只排此个优化 是 增有判来排,一次算 有额外多个

时间复杂度(logn)

算x次剩 未算排 最差直到最后剩1个后算排完

2.模板

int left = 0, right = nums.length - 1;

while(left <= right)

       int mid = left + (right + left) / 2;

       if(二段性排掉左边) left = mid + 1;  

       else if(二段性排掉右边) right = mid - 1;

       else return;

}

四、提交代码

public int search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { //int mid = (left + right) / 2; 如果两个大数相加 就会和溢出算数范围,所以相加时得一方是确保小数 int mid = left + (right - left) / 2; // 一方小数求中点(算术和为mid 比right小 都没有溢出) if(nums[mid] > target) right = mid - 1; else if(nums[mid] < target) left = mid + 1; else return mid; } return -1; }

Read more

【Java 开发日记】我们来说一下 synchronized 与 ReentrantLock 的区别

【Java 开发日记】我们来说一下 synchronized 与 ReentrantLock 的区别

目录 一、基本特性对比 二、详细区别分析 1. 实现层面 2. 使用方式 3. 公平性选择 4. 条件变量(Condition) 5. 中断与超时 6. 性能差异 三、适用场景 优先使用 synchronized 的情况 优先使用 ReentrantLock 的情况 四、示例对比 场景:生产者-消费者模型 五、总结 面试回答 一、基本特性对比 特性 synchronized ReentrantLock 锁的实现机制 JVM 内置关键字,通过监视器实现 JDK 提供的 API 类(java.util.concurrent.locks)

By Ne0inhk
Java SpringBoot框架Web开发实战04--使用Lockback技术进行日志管理

Java SpringBoot框架Web开发实战04--使用Lockback技术进行日志管理

日志是每个网页所必须的东西,当网站出错时,日志就可以帮我们快速查看错误,传统的systemout进行输出日志有很多缺陷。一是如果后来某一大板块不需要日志进行输出,这时候你想要修改代码要把所有的输出代码全部删除,二是这种方式不会保留日志文件,如果出现闪退现象你无法得知是哪里的错误,但是使用lockback技术就可以避免这些问题。 下面是一段完整的logback.xml代码。 <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 控制台输出 --> <appender name="STDOUT"> <encoder> <!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%logger显示日志记录器的名称, %msg表示日志消息,

By Ne0inhk
用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

之前有同仁反馈,用Nano Banana画科研插图的时候,要么文字部分容易乱码,要么抓不住关键内容,画出来的效果反复修改后,还是达不到理想的效果。 终于在Gemini 3发布没几天,万众期待的大香蕉模型也成功升级到了Pro版本,官方名称叫“Gemini 3 Pro Image”,实际上也就是我们说的Nano Banana 2。 这次的Nano Banana Pro模型,不仅可以直出4K高清图,还能自定义比例,推理能力和中文文字的稳定性也得到了提升。 七哥实测用Nano Banana Pro模型来绘制科研插图,效果非常好,接下来我来进行实操,分别用它来画机制图和技术路线图。 开始之前我们需要打开Gemini 3Pro的Thinking模式,然后点击工具中的“Creat Image”,这样才算是调用Nano Banana Pro模型。 1、机制图 机制图的核心要求是科学准确,逻辑、符号和关键信息绝对不能出错,格式方面要统一,配色需符合特定期刊要求。

By Ne0inhk
个人健康中枢的多元化AI硬件革新与精准健康路径探析

个人健康中枢的多元化AI硬件革新与精准健康路径探析

在医疗信息化领域,个人健康中枢正经历着一场由硬件技术革新驱动的深刻变革。随着可穿戴设备、传感器技术和人工智能算法的快速发展,新一代健康监测硬件能够采集前所未有的多维度生物数据,并通过智能分析提供精准的健康建议。本文将深入探讨构成个人健康中枢的最新硬件技术,分析它们如何采集和处理多维生物数据,以及这些数据如何转化为个性化的健康指导方案,最终实现从被动治疗到主动预防的健康管理模式转变。 多维度生物数据采集的最新硬件技术 个人健康中枢的构建离不开先进的数据采集硬件,近年来,各类创新设备在生物信号采集能力上取得了显著突破,能够从生理、心理及行为等多个维度获取健康相关数据。 智能穿戴设备已从简单的步数计数器进化为精密的生物传感器网络。现代智能手表和手环不仅能够持续监测心率、血氧饱和度、血压等传统生理指标,还整合了心电图(ECG)和连续血糖监测(CGM)功能,实现了对心血管系统和代谢系统的高精度追踪[0

By Ne0inhk