算法训练营第一天 704 .二分查找、27.移除元素

news2024/9/25 23:23:51

算法训练营第一天 | 704 .二分查找、27.移除元素

( 一 )、704 二分查找

题目链接:https://leetcode.cn/problems/binary-search/description/

解题思路:

​ 数组 nums 是有序排列的,二分查找每次都是对半查询,其实也是双指针的思想,一个 left 指向数组的第一个元素(元素的在数组中位置), 另一个 right 指向数组的最后一个元素。取数组中间的值( mid = ( left + right ) / 2 ) 进行比较,这里的 mid 也是中间元素的坐标 , 如果 nums[ mid ] 和传入的值 target 相等,那么说明我们找到了这个元素,则返回 mid .

​ 如果不相等,我们就进行下面的判断,if ( nums[ mid ] < target ) ,说明 target 的大小是在右半部分, 那么此时,我们将 left 移动至 mid 的前一个位置。 left =mid +1 ,

	相反  if (  nums[ mid ]  >  target  )   说明说明 target 的大小是在左半部分,同样 我们将 right 移动到mid 的后一个位置。right = mid  -1 ;

在这里插入图片描述

重点:

循环什么时候停止:(1 . ):找到了我们的 target 直接返回 mid

​ ( 2 .) : left <= right ,循环的终止条件,这里为什么要 取等于,如果我们直接小于就结束的话,这样 是不是就漏 掉一个元素没有比较。
在这里插入图片描述

当我们的循环结束之后,说明没有找到数组中不存在 target ,那么此时我们直接返回 -1 .

具体实现代码如下:

int search(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size()-1;
      
        while( left <= right ){
            int mid=(left+right)/2;
             if( nums[mid]==target ){
                 return mid;
             }else if( nums[mid] < target){
                 left=mid+1;
                 continue;
             }else if( nums[mid] > target ){
                 right=mid-1;
                 continue;
             }
        }
        //循环结束之后没有找到目标值
        return -1 ;

如果还没有明白的朋友,可以看看视频版讲解(代码随想录): 二分查找视频讲解

( 二 )27. 移除元素

题目链接: 27. 移除元素 - 力扣(LeetCode)

解题思路:

说明: 这里我们不使用c++ 的迭代器 (iterator)+ 库函数 eras() 直接删除的方式来实现。

这里呢我们采用的还是双指针的思路:

其实也很简单,我们定义两个变量 man , kuai ,开始都指向数组的第一个元素,然后开始循环遍历( kuai指针来控制控制循环 ),如果 nums[ kuai ]!= val ,说明不是我们要删除的元素 , nums[ man ]=nums[ kuai ](用慢指针来接受),如果相等,则不做任何处理,进入下一层循环,最后循环结束之后,man( 慢指针 )的值就是我们元素的个数,直接返回。

具体代码实现:

int removeElement(vector<int>& nums, int val) {
        int kuai=0 ;
        int man=0 ;
        for(  ; kuai < nums.size() ; kuai++ ){
            if( nums[kuai] != val){
                nums[ man ] = nums[ kuai ];
                man++;
            }
        }
        return man;
    }

视频版讲解(代码随想录):移除元素视频讲解

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

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

相关文章

【离散数学必刷题】命题逻辑(第一章 左孝凌)刷完包过!

复习16题&#xff1a; 【1】下列哪个语句是真命题&#xff08;&#xff09; A、今天天气真好&#xff01; B、我正在说谎。 C、如果7 2 10 &#xff0c;那么4 6 5。 D、如果7 2 9 &#xff0c; 则 4 6 5。 对于A&#xff0c;只有具有确定真值的陈述句才是命题&#xf…

TotalFinder v1.15.1(Finder代替工具)

TotalFinder是一款功能强大的文件管理工具&#xff0c;为Mac用户提供了一整套增强的文件管理功能和工具&#xff0c;能够更高效地管理和组织文件。 TotalFinder的主要特点包括&#xff1a; 为Finder添加了选项卡功能&#xff0c;允许多个文件夹在同一个窗口中同时打开。用户可…

一文精通C++ -- 继承

前言&#xff1a;继承是C类和对象三大特性中关键的一环&#xff0c;上承封装&#xff0c;下接多态&#xff0c;C中的继承是一种面向对象编程的概念&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff08;称为父类或基类&#xff09;的属性…

Java常见限流方式

Java常见限流方式 1、计数限流2、固定窗口限流3、滑动窗口限流4、漏桶算法5、令牌桶算法 1、计数限流 例如系统能同时处理 100 个请求&#xff0c;保存一个计数器&#xff0c;处理了一个请求&#xff0c;计数器就加一&#xff0c;一个请求处理完毕之后计数器减一。 每次请求来…

学校档案管理系统软件-学校数字档案室解决方案

学校档案管理系统软件是一个用于存储和管理学校重要文档和资料的软件系统&#xff0c;该软件通常包括档案录入、查询、统计、备份等模块&#xff0c;它通过电子化记录、分类和整理学校档案资料&#xff0c;实现了学校档案的高效管理和利用。 专久智能学校数字档案室解决方案需要…

N1中openwrt实现不插网线就能上网,通过wifi连接路由器

环境说明&#xff1a; 路由器&#xff1a;N1盒子 系统版本&#xff1a;openwrt 前言 既然想用这个功能&#xff0c;基本上就是没有网线连接盒子了&#xff0c;不仅限于N1盒子只要是openwrt系统就可以 创建接口 在openwrt界面上依次点击“网络”->“无线”&#xff0c;第一…

正点原子嵌入式linux驱动开发——RGB转HDMI

目前大多数的显示器都提供了HDMI接口&#xff0c;HDMI的应用范围也越来越广&#xff0c;但是STM32MP157这颗芯片原生并不支持HDMI显示。可以通过RGB转HDMI芯片将RGB信号转为HDMI信号&#xff0c;这样就可以连接HDMI显示器了。本章就来学习一下如何在正点原子的STM32MP1开发板上…

听说嵌入式门槛很高,值不值得学习?工资怎么样?

今日话题&#xff0c;嵌入式门槛很高&#xff0c;值不值得学习呢&#xff1f;关于嵌入式领域的门槛和薪酬&#xff0c;我有着五年的实际经验&#xff0c;我的看法是嵌入式岗位的门槛一般来说并不太高。只需掌握一些C语言编程和单片机知识&#xff0c;制作一个简单的电子产品就可…

会声会影2024 无损激活解锁完整旗舰版大师套装

会声会影2024 无损激活解锁完整旗舰版大师套装是功能非常强大的视频编辑软件&#xff0c;非常专业的使用效果&#xff0c;会声会影2024中文版可以针对剪辑电影进行使用&#xff0c;非常强大的色彩校正方式&#xff0c;无论什么光线下进行拍摄&#xff0c;都可以通过后期进行调整…

LinkedHashMap 源码解析

目录 一. 前言 二. 源码解析 2.1. 类结构 2.2. 成员变量 2.3. 构造方法 2.4. accessOrder 2.5. 添加元素 2.6. 获取元素 2.7. 删除元素 2.8. 迭代器 三. LRU简单实现 一. 前言 HashMap元素插入是无序的&#xff0c;为了让遍历顺序和插入顺序一致&#xff0c;我们可以…

海外网红评论:激发更高转化率的关键

随着社交媒体的兴起&#xff0c;海外网红营销已经成为企业推广产品和服务的一种重要方式。然而&#xff0c;在众多的海外网红营销策略中&#xff0c;网红评论的重要性往往被低估。事实上&#xff0c;海外网红评论可以在提高转化率方面发挥关键作用。本文Nox聚星将和大家深入探讨…

linux中好玩的数据流定向和管道命令一

知识点复习&#xff1a; 什么是数据流定向&#xff0c;个人理解就是将 一些结果信息不打印在屏幕上&#xff0c;而是定位在某一个文件里面 ll /wdf > file 会覆盖file的原内容 ll /wdf >> 会追加到原文件后面 比如在自己的目录新建1.TXT&#xff0c; 2.txt ll /…

制药企业计算机化系统验证(CSV)的重要性

上次我们介绍了>>《制药机械(设备)计算机化系统验证指南》&#xff0c;本期我们就来展开讲讲制药企业为什么需要以及如何进行计算机化系统验证。 计算机化系统验证&#xff08;Computerized Systems Validation&#xff0c;简称CSV&#xff09;是一种确保计算机化系统在药…

Java 新手如何使用Spring MVC 中的查询字符串和查询参数?

文章目录 什么是查询字符串和查询参数&#xff1f;步骤 1:步骤 2:步骤 3:步骤 4: 结论 &#x1f389;欢迎来到架构设计专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&…

利用Jmeter对WebRTC应用进行压力测试

说明&#xff1a;WebRTC是一款开源的多人即时视频API&#xff0c;与一般的http请求不同&#xff0c;webrtc应用实际压力主要是码流 最近负责了一个WebRTC的视频会议性能测试&#xff0c;也蛮有意思的&#xff0c;因此将压测方案、思路记录下来 一、测试思路 1、WebRTC多人会…

安科瑞余压监控系统

安科瑞 崔丽洁 机械加压送风系统中为什么要设计旁通阀控制加压送风的正压值&#xff1f;火灾发生后&#xff0c;又能起到什么作用呢&#xff1f; 发生火灾时&#xff0c;绝大多数的人员伤亡不是因为火&#xff0c;而是烟气&#xff0c;随着可燃物的燃烧产生大量的高温烟气&…

【数据结构与算法】二叉树的知识讲解

目录 一&#xff0c;二叉树的结构深入认识 二&#xff0c;二叉树的遍历 三&#xff0c;二叉树的基本运算 3-1&#xff0c;计算二叉树的大小 3-2&#xff0c;统计二叉树叶子结点个数 3-3&#xff0c;计算第k层的节点个数 3-4&#xff0c;查找指定值的结点 一&#xff0c;二叉…

栈(Stack)的概念+MyStack的实现+栈的应用

文章目录 栈&#xff08;Stack&#xff09;一、 栈的概念1.栈的方法2.源码分析 二、MyStack的实现1.MyStack的成员变量2.push方法3.isEmpty方法和pop方法4.peek方法 三、栈的应用1.将递归转化为循环1.调用递归打印2.通过栈逆序打印链表 栈&#xff08;Stack&#xff09; 一、 栈…

【Javascript】数组的进阶操作

目录 splice 截取部分元素&#xff0c;保留剩下元素 清空数组 join 自定义分割符 concat 连接 a连接b b连接a a连接b,c 不会改变原数组 splice ⽤于删除或替换元素函数有返回值&#xff0c;返回的是被删除的元素这个⽅法会改变原来的数组 截取部分元素&#xff0…

黑金测评:电视盒子哪款好?双十一热销电视盒子排行榜

大家好&#xff0c;本期我们要分享的测评内容是关于电视盒子&#xff0c;双十一很多网友打算购入电视盒子&#xff0c;但并不了解电视盒子哪款好&#xff0c;本期我们自费测评了最热门的十款电视盒子&#xff0c;最终筛选出了五款最值得入手的电视盒子整理了这份电视盒子排行榜…