LeetCode笔记 NO.704二分查找

【Java完整版 面试必备】Leetcode Top100题目和答案-二分查找篇 阅读详情

题目描述

 1.撸起袖子就是干!

 1.1代码

 public int mySearch(int[] nums, int target) {
        int j = nums.length-1;
        int i = 0;
        int result = -1;
        //边界条件有问题,当数组只有相同元素时条件错误
        while(target > nums[i] && target < nums[j] && i != j){
            int k = (i+j)/2;
            if(k == i || k == j){
                return result;
            }
            if(target > nums[k]){
                i = k;
            }else if(target < nums[k]){
                j = k;
            }else{
                result = k;
                break;
            }
        }
        return result;
    }

1.2报错

 2.题解

2.1方法一:二分查找

在升序数组 nums 中寻找目标值 target,对于特定下标 i,比较 nums[i] 和 target 的大小:

如果 nums[i]=target,则下标 i 即为要寻找的下标;

如果 nums[i]>target,则 target 只可能在下标 i 的左侧;

如果 nums[i]<target,则 target 只可能在下标 i 的右侧。

基于上述事实,可以在有序数组中使用二分查找寻找目标值。

二分查找的做法是,定义查找的范围 [left,right],初始查找范围是整个数组。每次取查找范围的中点 mid,比较 nums[mid] 和 target 的大小,如果相等则 mid 即为要寻找的下标,如果不相等则根据 nums[mid] 和 target 的大小关系将查找范围缩小一半。

由于每次查找都会将查找范围缩小一半,因此二分查找的时间复杂度是 O(logn),其中 n 是数组的长度。

二分查找的条件是查找范围不为空,即 left≤right。如果 target 在数组中,二分查找可以保证找到 target,返回 target 在数组中的下标。如果 target 不在数组中,则当 left>right 时结束查找,返回 −1。

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

3.二周目挑战BOSS

public int fixMySearch(int[] nums, int target) {
        int j = nums.length-1;
        int i = 0;
        int result = -1;
        //这里要是<= 如果是<存在当数组只有一个元素的情况
        while(i <= j){
            int k = (i+j)/2;
            if(target > nums[k]){
                //这里+1、-1是为了防止(i+j)/2 = i || j,使得代码无限循环
                i = k+1;
            }else if(target < nums[k]){
                j = k-1;
            }else{
                result = k;
                break;
            }
        }
        return result;
    }

AC了

4.程序员の沉淀

实际使用求中间mid索引建议用这种方法:int mid = left + (right-left)/2;

可以防止left+right溢出(超出整数范围)

leetcode刷题—二分查找 请你找出给定目标值在数组中的开始位置和结束位置。,用于验证找到的索引是否真的对应目标值。给你一个按照非递减顺序排列的整数数组。,如果目标值存在返回下标,否则返回。个元素有序的(升序)整型数组。你必须设计并实现时间复杂度为。如果数组中不存在目标值。 阅读详情

相关推荐

Leetcode No.704 二分查找

一、题目描述 给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。 示例 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 提示: 你可以...

547

JS返回数组对象中满足相关对象条件的下标

一、方法 Array.findIndex() findIndex()方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。 findIndex()方法为数组中的每个元素都调用一个函数执行。 当数组中的元素在测试条件时返回true时,findIndex()返回符合条件的元素的索引位置,之后的值就不会再调用执行函数。 如果没有符合条件的元素就返回-1。 注意: findIndex()对于空数组,函数是不会执行的。 findIndex()并没有改变数组的原始值。 二、Array.findIndex()

drawlessonsfrom的博客 8232

js对象根据下标变成数组

js对象根据下标变成数组

学习记录:js算法(三十六): 二分查找

二分查找法的速度比数组的高阶方法快很多。

weixin_48677331的博客 668

js代码-js数组查找元素 findIndex() 方法,返回第一个匹配元素下标

js代码-js数组查找元素 findIndex() 方法,返回第一个匹配元素下标

树莓派4在Bookworm Raspbian系统下无法进入桌面模式(启动后出现彩色画面,然后一直黑屏,但是可以正常启动和ssh)

本文记录了这段比较坎坷的探索之路,由于你的问题不一定是我最终解决方案的,可能是前面探索路上试过的,所以建议按顺序看排除前置问题。 双十一又买了个树莓派 4B,插上之前树莓派 4B 的 TF 卡直接就能使用(毕竟是一样规格的)。但是由于用来连接硬盘的 USB 线是坏的,我以为是系统问题就进行了重装(所以坏掉的线还是直接扔了好)。 重新安装系统就装了最新的 2023-10-10 版本的 64 位的 Raspberry Pi OS,但是出现了一个问题: 启动后出现彩色画面,然后一直黑屏。

ZhongUncle的博客 3735

leetcode 704 - 二分查找 - Java版本解题

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。输入:nums = [-1,0,3,5,9,12],target = 9。解释:9出现在nums中并且下表为4。

chaojiniuniu的博客 186

如何在Android上使用OpenCV进行摄像头标定

如何在Android上使用OpenCV进行摄像头标定,我们这里使用官方一个例程,其实并不难,只是网上的资料少了而已。相机标定是计算机视觉工作的前提,为了确定相机矩阵和畸变参数。

花草的博客 3439

Leetcode二分查找刷题总结(Part1)

二分查找:精髓 https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/mian-shi-ti-11-xuan-zhuan-shu-zu-de-zui-xiao-shu-3/

qq_41605114的博客 1572

Maya ACES工作流程配置(Arnold 及 RedShift 贴图配置规范-还原出SP-Aces流程下贴图正确的效果) PS还原Aces流程下渲染的图

*如果使用SP,项目工程如果新建的时候设置的就是Aces的流程的话,按规范正常导出即可,贴图会带上相对应的后缀,然后贴图导入材质球的时候会根据后缀自动设置相对应的色彩空间;**万一不是,就自己手动设置一下对应的色彩空间即可;然后点击选择当前的或者选择全部导入的贴图,点击右下角后,开始转换;我复制了一下,一个默认没有LUT的效果,然后另外一个是加载2个LUT后的还原效果,和渲染的效果应该是没有区别的,至少我没有看出明显的区别;把需要转换的贴图拖拽到左侧,然后右面选择需要转换到的相对应的色彩空间;...

Yuulily 7992

别让你的URDF模型在Gazebo里‘躺平’:手把手教你配置libgazebo_ros_diff_drive插件让两轮小车动起来

本文详细解析了如何在Gazebo中配置libgazebo_ros_diff_drive插件,使两轮小车模型实现动态仿真。从URDF模型到传动装置,再到差速驱动插件的精细调参,手把手教你解决机器人‘躺平’问题,提升ROS1与Gazebo仿真的实战能力。

weixin_42552716的博客 333

LeetCode No.704 二分查找 & No.27移除元素

LeetCode 数组刷题

ZHOUZH的博客 529

从ISCXTor2016到CICIDS2017:手把手教你下载和使用UNB的网络安全数据集

本文详细介绍了UNB大学发布的ISCXTor2016和CICIDS2017等网络安全数据集的下载与使用方法,特别适合加密流量识别和网络行为分析研究。文章提供了多种高效获取路径、文件结构解析及实战分析示例,帮助研究者快速上手这些真实场景捕获的精细标注数据集。

weixin_42524945的博客 630

【算法|二分查找No.1】leetcode 704. 二分查找+二分模板 & leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

【算法|二分查找No.1】leetcode 704. 二分查找+二分模板 & leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

m0_74352571的博客 1395

innovus:如何在init design之后新增参考库(lib/lef)

如题,在PR过程中经常会遇到这种问题,时序无法收敛,需要新增一套lvt或者hpc的库,怎么办?

m0_61544122的博客 5001

第229篇 轨迹时间参数化——TOPP-RA和速度约束处理

本文介绍了时间最优路径参数化(TOPP)问题及其解法。TOPP研究如何在给定空间路径上分配时间,使机器人运动时间最短且不超速,需满足速度、加速度和力矩约束。经典解法采用相平面法,通过前向和后向扫描确定最优速度曲线。TOPP-RA改进了数值稳定性,支持多约束处理。文章对比了TOPP与轨迹优化的区别,列举了开源工具,并解答了面试常见问题,指出TOPP广泛应用于机械臂、AGV等领域。TOPP不改变路径形状,仅优化速度分配,其最优解具有bang-bang特性。

郑伟强dev的专栏 318

代码随想录算法训练营第一天|力扣No.27移除元素与No.704二分查找

力扣27和704刷题

m0_54121965的博客 270

雷达参数的设置

采样率又可以叫做采样速率或者,顾名思义就是每秒采集的次数。该值越高,单位时间内对信号的采集越多,采样率的单位可以用Hz或者sps表示(sps是采样率,是每秒采样点的数量,sp表示采样点数),一般1sps=1Hz。采样时间是采样点数和采样周期的乘积得到的结果。假设实际采样率为4560ksps,采样点数为256,那么采样周期为1/4560(ms),那么ADC的采样时间就为256*(1/4560)(ms)=0.056ms=56微秒。

qq_50974341的博客 1911

LeetCode每日一题: 二分查找(No.704)

题目: 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值target,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 复制代码 示例: 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 输入: nums = [-1,0,3,5,9...

weixin_33709590的博客 800

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【力扣(LeetCode)】【C/C++】【704.二分查找】

力扣(LeetCode)

繁华倾夏的博客 116

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

代码随想录算法训练营No1 |Leetcode704. 二分查找,27. 移除元素

leetcode数组二分查找、双指针

Rocket,Qian的博客 433

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【算法】代码随想录训练营Day1打卡,LeetCode 704二分查找 LeetCode27 移除元素

本文讲解了数组的数据结构以及力扣27题与704题,讲解了二分法和双指针法的数组解法

YuZzz1的博客 507

【LeetCode No.704】二分查找——《算法入门》

题目链接:二分查找 思路: 给定数据已经是升序排列,无需处理; 设定位置记录关键字pivot为中间下标,并与target值进行比较; 等于目标值:返回下标pivot; 大于目标值:将左侧最大位置记录关键字置为位置关键字后一位:left = pivot + 1; 小于目标值:将右侧最大位置记录关键字置为位置关键字前一位:right = pivot - 1; 找不到目标值,按题目要求返回 -1; class Solution { public: int search(vector<int&gt

死粉斋藤的博客 211

leetcode算法-二分查找法

二分查找法 例子:猜数字 猜100以内的一个数字,先猜50,大了就锁定范围1-49,小了就锁定范围51-100。以此类推,每次猜中间的数来锁定范围,直到猜出数字。 例子:数组搜索元素 给定一个有序数组,搜索数组重是否存在某个元素。如果使用遍历,时间复杂度是O(N)。如果使用二分查找发,时间复杂度是O(log2Nlog_2Nlog2​N),因为每次排除一半的元素。 特点 查找的元素必须有序。 二分查找法相关leetcode No.704 二分查找 思路:先判断数组是否为空,是则返回-1。然后定义左指针和右指针

Prayer96的博客 553

力扣刷题---NO.1

力扣每日刷题

weixin_62460153的博客 202

【算法合集-leetcode系列】1.二分查找(No.704)

题目描述如下:704. 二分查找https://leetcode.cn/problems/binary-search/算法思路:最简单的二分法,移动指针。*记得防止死循环的方法是指针移动mid+-1

qq_32793161的博客 242
上一篇: OpenFeign的@FeignClient注解不指定URL报错:Load balancer does not have available server for client
下一篇: LeetCode笔记 NO.27移除元素
Zyang_CodeBoy
博客等级 码龄1年 15粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值