Leetcode——数组:二分搜索法704.二分查找相似题目

news2024/10/7 7:08:41

知识点:

二分搜索的区间,一般分为左闭右闭或左闭右开

left=0
易错点1
while(易错点2)
{
    middle=(left+right)/2
    if(nums[middle]>target)
    {
        right=易错点3
    }
    else if(nums[middle]<target)
    {
        left=middle+1
    }
    else if(nums[middle]=target)
    {
        return target
    }
}
return -1

易错点:

1、定义right时是否-1

1、while循环条件,left是<还是<=right

2、当更新右区间时,right等于middle还是middle-1

1、左闭右闭

(1)right=numsize-1

定义时,将右侧减去,右边界left代表的为真实数据,因此右侧为闭区间

(2)while(left<=right)

右侧为闭区间,nums[left]为数组中的数据,也需要被比较,因此应该包括到循环条件中

(3)right=middle-1

if判断nums[middle]是否大于target时,nums[right]为准确的右边界。重新定义区间时,新区间应该为除去nums[middle]以后,左侧的全部数,因此应该-1

2、左闭右开

(1)right=numsize

右侧不-1,最右侧为一个虚值,不是实际数组中的数据

(2)while(left<right)

最右侧为虚值,如果使用等于,则会少比较最右侧的数字

(2)right=middle

当判断后,接下来的搜索区间多包含nums[right],因此不-1

nums[right]是否为准确值右边界right=while判断条件右边界重定义right=
准确值numsize-1left<=rightmiddle-1
不准确numsizeleft<rightmiddle

例题:704:二分查找

题目

(1)nums[right]不是准确值

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size();
        while(left<right)
        {
            int middle=(left+right)/2;
            if(nums[middle]>target)
            {
                right=middle;
            }
            else if(nums[middle]<target)
            {
                left=middle+1;
            }
            else if(nums[middle]==target)
            {
                return middle;
            }
        }
        return -1;
    }
};

(2)nums[right]是准确值

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size()-1;
        while(left<=right)
        {
            int middle=(left+right)/2;
            if(nums[middle]>target)
            {
                right=middle-1;
            }
            else if(nums[middle]<target)
            {
                left=middle+1;
            }
            else if(nums[middle]==target)
            {
                return middle;
            }
        }
        return -1;
    }
};

vector的基础知识

vector分为容量和使用量,用size()返回向量的使用量,用capacity返回向量的容量

不可以使用sizeof计算长度

相似题目 :2529:正整数和负整数的最大计算

题目

https://leetcode.cn/problems/maximum-count-of-positive-integer-and-negative-integer/

 

题解

class Solution {
public:
    int maximumCount(vector<int>& nums) {
        int pos=0;  //正整数数目
        int neg=0;  //负整数数目
        int numsize=nums.size();
        int i=0;
        while(i<numsize)
        {
            if(nums[i]<0)
            {
                neg++;
            }
            else if(nums[i]>0)
            {
                pos++;
            }
            i++;
        }
        if(neg>=pos)
        {
            return neg;
        }
        else
        {
            return pos;
        }
    }
};

相似题目:1351:统计有序矩阵中的负数

题目

题解

class Solution {
public:
    int countNegatives(vector<vector<int>>& grid) {
        int i=0;
        int j=0;
        int num=0;
        int length=grid.size();
        int width=grid[0].size();
        for(int i=0;i<length;i++)
        {
            for(int j=0;j<width;j++)
            {
                if(grid[i][j]<0)
                {
                    num++;
                }
            }
        }
        return num;
    }
};

矩阵vector

二维矩阵时,.size()得到的是行数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NRF52832

当我下载完NRF的芯片包后出现了一个缺失pack的问题 解决方法&#xff1a; CMSIS缺失警告_error #541: arm::cmsis:core:4.3.0 component is m-CSDN博客 引入新的型号的芯片问题总结&#xff1a; 一般引入新的型号的芯片都会涉及到.pack和芯片包的问题 外设调用&#xff1a; …

论文阅读:LLaVA-OneVision: Easy Visual Task Transfer

论文地址&#xff1a;https://arxiv.org/pdf/2408.03326 公开时间&#xff1a;2024年9月14日 项目地址&#xff1a;https://llava-vl.github.io/blog/llava-onevision LLaVA-OneVision是一个开放的大型多模态模型&#xff08;LMMs&#xff09;&#xff0c;它是通过整合在LLaVA…

【星闪开发连载】SLE_UUID_Server和SLE_UUID_Client程序分析

引言 星闪测试已经搁置了很久了&#xff0c;主要是8-9月份太忙了。今天重新捡回来。想看看官方提供的星闪例子&#xff0c;在application\samples\bt\sle\sle_uuid_client\和sle_uuid_server目录。这两个例子是一对&#xff0c;一个用来广播服务&#xff0c;另一个去连接。对应…

Mybatis-plus的基础用法

文章目录 1. 核心功能1.1 配置与编写规则1.2 条件构造器1.3 自定义SQL1.4 IService接口1.4.1 Lambda方法1.4.2 批量新增 1.5 分页查询 2. 拓展功能2.1 代码生成器2.2 DB静态工具2.3 逻辑删除2.4 枚举处理器 参考 1. 核心功能 1.1 配置与编写规则 Maven依赖&#xff1a; <…

Autosar EcuM配置-初始化及下电执行函数-基于ETAS软件

文章目录 前言EcuMCommonConfigurationEcuMDriverInitListOneEcuMModuleIDEcuMModuleParameterEcuMModuleServiceEcuMRbDriverInitCoreIdEcuMDriverInitListZeroEcuMGeneralEcuMRbOnGoOffOneCalloutEcuMRbCalloutFunctionEcuMRbModuleIDEcuMRbServiceIsNonAutosarEcuMRbOnGoOff…

java控制台输出乱码

第一步&#xff1a;修改 IntelliJ IDEA 全局编码、项目编码、属性文件编码 File->Settings… Editor->File Encodings(不要忘记点击Apply然后OK) 第二步&#xff1a;修改当前 Web 项目 Tomcat Server 的虚拟机输出选项 Run->Edit Configurations… 复制代码->…

DBMS-3.2 SQL(2)——DML的SELECT(含WHERE、聚集函数、GROUP BY、HAVING之间的关系)

本文章的素材与知识来自李国良老师和王珊老师。 数据操纵语言DML&#xff08;Data Manipulation Language&#xff09; SELECT 一.SELECT的语法与构成 1.语法 2.构成 二.投影 投影操作可以选择表中的若干列&#xff0c;主要体现在SELECT子句后的列表达式。 1.列表达式 2.…

【书生浦语实战】茴香豆企业级知识库问答工具-搭建Dify问答助手

快速结论 1、用茴香豆快速搭建Dify问答助手&#xff0c;自带拒答、rerank、切片长度判断、阈值调节功能&#xff0c;回答还能带出图片&#xff0c;顶呱呱&#x1f44d; 2、茴香豆git仓地址&#xff1a;https://github.com/internlm/huixiangdou 遇到问题去翻这里会更多解释&…

如何利用免费音频剪辑软件制作出精彩音频

现在有许多免费的音频剪辑软件可供选择&#xff0c;它们为广大用户提供了丰富的功能和便捷的操作体验&#xff0c;让音频编辑变得更加轻松和有趣。接下来&#xff0c;让我们一起走进这些免费音频剪辑软件的世界&#xff0c;探索它们的独特魅力和强大功能。 1.福昕音频剪辑 链…

李宏毅深度学习-图神经网络GNN

图卷积的开源代码网站DGL 好用的还是 GAT, GIN&#xff08;指出最好的卷积 就是 hi 邻居特征&#xff08;而且只能用 sum&#xff09;&#xff09; Introduction GNN 可以理解为是由 Graph&#xff08;图) Nerual Networks 组合而成的&#xff0c;图结构应该都在数据结构与…

No.12 笔记 | 网络基础:ARP DNS TCP/IP与OSI模型

一、计算机网络&#xff1a;安全的基石 1. 网络的本质&#xff1a;数字世界的神经系统 定义&#xff1a;计算机的互联互通&#xff0c;实现资源共享和信息交换组成要素&#xff1a;发送者、接收者、介质、数据、协议&#xff08;五大要素&#xff09; 2. 网络架构&#xff1…

STM32PWM应用

一、输出比较(OC) OC&#xff08;Output Compare&#xff09;输出比较 可以通过比较CNT与CCR寄存器值的关系&#xff0c;来对输出电平进行置1、置0或翻转的操作&#xff0c;用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前…

三菱FX3U定位控制接线示例(脉冲控制伺服)

一、FX3u系列基本单元(DC24V输入) 二、FX3u系列基本单元(晶体管输出) 脉冲输出用端子Y000、 Y001、 Y002为高速响应输出。 三、FX3UPLC链接MR-J4-A伺服连接实例 1、为了安全起见&#xff0c;不仅仅在可编程控制器侧&#xff0c;在伺服放大器侧也请设计正转限位和反转限位的限位…

查缺补漏----拥塞窗口

注意事项1&#xff1a; 首先区分超时和收到3个冗余ACK&#xff0c;显然超时更加严重。如下图所示&#xff1a; 如果网络出现超时&#xff0c;那么发送窗口cwnd变为1&#xff0c;门限值ssthresh变为原来拥塞窗口的一半 如果收到3个冗余ACK&#xff0c;发送窗口cwnd门限值ssth…

Java重修笔记 第六十一天 坦克大战(十一)IO 流 - 节点流和处理流、BufferedReader 和 BufferedWriter

节点流和处理流的区别和联系 1. 节点流是底层流/低级流&#xff0c;直接和数据源联系 2. 处理流是经过包装过后的节点流&#xff0c;也叫包装流&#xff0c;既可以消除不同节点流的实现差异&#xff0c;也可以提供更方便的方法来完成输入输出 3. 处理流&#xff08;包装流&…

二叉树基本概念讲解

一.树的概念 1.概念 树是⼀种非线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09;个有限结点组成⼀个具有层次关系的集合。把它叫 做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有⼀个特殊的结点&#xff0c…

动态规划基础一>面试题 08.01. 三步问题

1.题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int waysToStep(int n) {/**1.创建dp表2.初始化3.填表4.返回值*/int MOD (int)1e9 7;//注意不能超出int范围&#xff0c;每做一次操作要取模//处理边界情况if(n 1 || n 2) return n;if(n 3) return 4;//1…

【小沐学CAD】ParaView Web的学习笔记(Python)

文章目录 1、简介1.1 visualizer1.2 Divvy1.3 Lite1.4 LightViz1.5 ArcticViewer1.6 HPCCloud1.7 glance1.8 trame 结语 1、简介 https://pvw.kitware.com/ VTK/ParaView Web&#xff0c;用于 Web 数据处理和可视化的框架 ParaViewWeb 是一个 Web 框架&#xff0c;用于在 Web …

[C++][第三方库][ODB]详细讲解

目录 1.介绍2.安装1.安装 build22.安装 odb-compiler3.安装 ODB 运行时库4.安装MySQL和客户端开发包5.安装 boost profile 库6.总体操作7.测试样例 3.ODB 常见操作1.ODB 类型映射2.ODB 编程1.指令2.示例 4.类与接口5.使用 1.介绍 ODB框架&#xff1a;数据库ORM框架 --> 对象…

vulnhub-Web Developer 1靶机

vulnhub&#xff1a;Web Developer: 1 ~ VulnHub 导入靶机&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.114.129&#xff0c;扫描端口 有网站服务&#xff0c;访问 没什么东西&#xff0c;扫目录 真不少&#xff0c;访问一下&#xff0c;也只是一些普通的Wordpr…