代码随想录算法训练营Day1 | 704.二分查找、27.移除元素

LeetCode 704 二分查找

题目链接:704.二分查找

本题思路:本题题目写的是二分查找,所以我们用到的算法肯定也是二分查找,需要定义 3个变量。
l: 从数组的下标0开始
r: 数组长度 - 1
mid:(l + r)>> 1,当数字很大的时候,会发生溢出,所以建议使用 l + ((r - l) >> 1)
所谓的二分查找就是每次找中间的那个值,判断是否与目标值相等,如果相等返回下标。如果不相等,再根据当前值和目标值大小,确定是 l++, 还是 r–。最终找到就返回下标,没找到就返回-1。

class Solution {
    public int search(int[] nums, int target) {
        if(target < nums[0] || target > nums[nums.length -1]){
            return -1;
        }
        int l = 0;
        int r = nums.length - 1;
        int mid = l + ((r - l) >> 1);
        while(l <= r){
            if(nums[mid] == target){
                return mid;
            }else if ( nums[mid] < target ){
                l = mid + 1;
            }else{
                r = mid - 1;
            }
            mid = l + ((r - l) >> 1);
        }
        return -1;
    }
}

下面用一个图,来演示下测试用例的一个过程,以便更加直观的分析了解代码。
在这里插入图片描述

  • 第一次判断的时候, nums[mid] != 9,并且 3<9,说明要找的目标值大于mid的值,所以目标值可能在 mid 的右边。在这里插入图片描述
  • 此时 l = mid + 1 = 3 ; mid = l + ((r-l)>>1) = 4。再判断 nums[mid] == 9。所以直接返回 mid 下标4在这里插入图片描述

注意事项:就是写代码的时候 while(left <= right) 还是 while(left < right)
上述代码使用的是 左闭右闭的一个区间:[0,nums.length-1],所以使用while(left <= right ),如果mid的值不等于target的话,那么要么就是 l = mid + 1,或者 r = mid - 1。

另一种写法为:左闭右开

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

LeetCode 27 移除元素

题目链接:27.移除元素
本题思路:使用双指针思想,一个慢指针pre,一个快指针cur。初始都在 0位置,然后利用 快指针往后遍历,判断当前值是否等于 目标值,如果不等于,就存到 nums[pre]中,然后 pre++ , 如果等于就继续移动 cur,直到超出范围。

class Solution {
    public int removeElement(int[] nums, int val) {
        int pre = 0;
        int cur = 0;
        while( cur < nums.length){
            if(nums[cur] != val){
                nums[pre] = nums[cur];
                pre++;
                cur++;
            }else{
                cur++;
            }
        }
        return pre;
    }
}

下面用一个图,来演示下测试用例的一个过程,以便更加直观的分析了解代码。
在这里插入图片描述

  • 首先 pre = cur = 0, 先判断 nums[cur] 是否等于 val, 发现不等,所以让 nums[pre] = nums[cur],然后 cur++,pre++在这里插入图片描述
  • 再一次从上图开始判断 nums[cur] 是否等于 val,发现相等,所以直接 cur++,数组 nums[pre]不赋值。在这里插入图片描述
  • 此时上图还是 判断nums[cur] 是否等于 val,发现相等,所以直接 cur++,数组 nums[pre]不赋值。在这里插入图片描述
  • 最后发现 nums[cur] 不等于 val,所以让 nums[pre] = nums[cur],然后 cur++,pre++在这里插入图片描述
  • 到这里的时候循环 cur = nums.length,不满足循环条件退出循环。返回 pre的值为2。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL进阶理论篇(二):数据库的设计范式

文章目录 简介数据库的设计范式有哪些数据库中的几种键从1NF到3NF1NF2NF3NFBCNF&#xff08;巴斯范式&#xff09; 反范式设计反范式的适用场景总结参考文献 简介 本小节主要内容&#xff1a; 数据库的设计范式都有哪些数据库的键都有哪些1NF、2NF和3NF都是指什么&#xff1f…

基于Dockerfile创建LNMP

实验组件 172.111.0.10&#xff1a;nginx docker-nginx 172.111.0.20&#xff1a;mysql docker-mysql 172.111.0.30&#xff1a;php docker-php 实验步骤 1.建立nginx-lnmp镜像及容器 cd /opt mkdir nginx cd nginx/ --上传nginx-1.22.0.tar.gz和wordpress-6.4.2-zh_C…

【LeetCode每日一题】1904. 你完成的完整对局数

给你两个字符串 startTime 和 finishTime &#xff0c;均符合 "HH:MM" 格式&#xff0c;分别表示你 进入 和 退出 游戏的确切时间&#xff0c;请计算在整个游戏会话期间&#xff0c;你完成的 完整对局的对局数 。 如果 finishTime 早于 startTime &#xff0c;这表示…

欧拉函数与欧拉定理

文章目录 AcWing 873. 欧拉函数题目链接欧拉函数欧拉函数的证明思路CODE时间复杂度分析 AcWing 874. 筛法求欧拉函数题目链接问题分析与时间复杂度CODE思路 欧拉定理 AcWing 873. 欧拉函数 题目链接 https://www.acwing.com/activity/content/problem/content/942/ 欧拉函数 …

四六级高频词组7

目录 词组 其他文章链接&#xff1a; 词组 251. &#xff08;be&#xff09; equivalent to&#xff08;equal in value&#xff0c; amount&#xff0c; meaning&#xff09; 相等于&#xff0c; 相当于 252. in essence &#xff08;in itsones nature&#xff09; 本质上…

20、备忘录模式(Memento Pattern,不常用)

备忘录模式又叫作快照模式&#xff0c;该模式将当前对象的内部状态保存到备忘录中&#xff0c;以便在需要时能将该对象的状态恢复到原先保存的状态。 备忘录模式提供了一种保存和恢复状态的机制&#xff0c;常用于快照的记录和状态的存储&#xff0c;在系统发生故障或数据发生…

网络安全项目实战(三)--报文检测

6. TCP/IP协议栈及以太网帧 目标 了解TCP/IP协议栈的组织结构掌握以太网帧的数据格式定义能应用编码实现以太网帧的解析方法 6.1. TCP/IP 协议栈 TCP/IP网络协议栈分为应用层&#xff08;Application&#xff09;、传输层&#xff08;Transport&#xff09;、网络层&#xf…

【UML】第4篇 UML公共机制(补扩展机制)

目录 一、扩展机制 1.1 构造型 1.2 标记值&#xff08;Tagged Value&#xff09; 1.3 约束&#xff08;Constraint&#xff09; 上节扩展机制没有讲完&#xff0c;如上图。 一、扩展机制 1.1 构造型 UML中的扩展机制包括约束、构造型和标记值&#xff0c;其中的构造型定义…

yo!这里是Linux信号相关介绍

目录​​​​​​​ 前言 基本介绍 概念 信号列表 信号处理 产生(发送)信号 通过按键产生 系统函数产生 软件条件产生 硬件异常产生 阻塞信号 信号状态 sigset_t 状态相关函数 1.sigprocmask 2.sigpending 捕捉信号 内核态与用户态 捕捉过程 sigaction 后…

分库分表及ShardingShpere-proxy数据分片

为什么需要分库&#xff1f; 随着数据量的急速上升&#xff0c;单个数据库可能会QPS过高导致读写耗时过长而出现性能瓶颈&#xff0c;所以需要考虑拆分数据库&#xff0c;将数据库分布在不同实例上提升数据库可用性。主要的原因有如下&#xff1a; 磁盘存储。业务量剧增&…

nodejs项目设置全局变量(global)

文章目录 前言一、使用global二、解决type typeof globalThis has no index signature.ts问题1、新建 /types/global.d.ts文件2、或者直接在入口文件/src/index.ts定义 三、最终效果鼠标放在global上&#xff0c;可显示global的类型生效了~ ![在这里插入图片描述](https://img-…

I.MX RT1170双核学习(2):双核相互激活和启动流程

RT1170这个芯片带有双核&#xff1a;Cortex-M7和Corterx-M4&#xff0c;两个核都可以独立地运行&#xff0c;当然双核也可以同时运行。在上一篇文章中&#xff0c;介绍了一下在RT1170中消息模块MU的使用&#xff1a;双核通信之MU消息单元详解&#xff0c;因为这是双核之间用来通…

05 python数据容器

5.1 数据容器认识 5.2 python列表 5.2.1 列表的定义 演示数据容器之&#xff1a;list 语法&#xff1a;[元素&#xff0c;元素&#xff0c;....] #定义一个列表List List [itheima,uityu,gsdfg] List1 [itheima,6666,True] print(List) print(List1) print(type(List)) pr…

smartKettle离线部署及问题记录

目录 &#x1f4da;第一章 前言&#x1f4d7;背景&#x1f4d7;目的&#x1f4d7;总体方向 &#x1f4da;第二章 部署&#x1f4d7;源码下载&#x1f4d7;后端部署&#x1f4d5;导入后端项目&#x1f4d5;修改settings.xml(自动下载相关jar包)&#x1f4d5; 编译&#x1f4d5; …

0x13 链表与邻接表

0x13 链表与邻接表 数组是一种支持随机访问&#xff0c;但不支持在任意位置插入和删除元素的数据结构。与之相对应&#xff0c;链表支持在任意位置插入或删除元素&#xff0c;但只能按顺序依次访问其中元素。我们可以使用一个struct来表示链表的节点&#xff0c;其中可以存储任…

MySQL线上死锁案例分析

项目场景 项目开发中有两张表&#xff1a;c_bill(账单表)&#xff0c;c_bill_detail(账单明细表)&#xff0c;他们的表结构如下&#xff08;这里只保留必要信息&#xff09;&#xff1a; CREATE TABLE c_bill_detail (id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 主…

Gin之GORM 查询语句

前期工作可以看之前的&#xff08;连接数据库&#xff1b;以及确定要操作的库&#xff09; Gin之GORM 操作数据库&#xff08;MySQL&#xff09;-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134948202?spm1001.2014.3001.5502这次我们操作gin库下的另外一个…

Lenovo联想拯救者Legion Y9000X 2021款(82BD)原装出厂Windows10系统

链接&#xff1a;https://pan.baidu.com/s/1GRTR7CAAQJdnh4tHbhQaDQ?pwdl42u 提取码&#xff1a;l42u 联想原厂WIN10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&am…

记录汇川:套接字TCP通信-梯形图

H5U集成一路以太网接口。使用AutoShop可以通过以太网方便、快捷对H5U进行行监控、下载、上载以及调试等操作。同时也可以通过以太网与网络中的其他设备进行数据交互。H5U集成了Modbus-TCP协议&#xff0c;包括服务器与客户端。可轻松实现与支持Modbus-TCP的设备进行通讯与数据交…

Redis哨兵模式:什么是哨兵模式、哨兵模式的优缺点、哨兵模式的主观下线和客观下线、投票选举、Redis 哨兵模式搭建

文章目录 什么是哨兵模式哨兵模式的优缺点主观下线和客观下线投票选举哨兵模式场景应用Redis version 6.0.5 集群搭建下载文件环境安装解压编译配置文件启动关闭密码设置 什么是哨兵模式 哨兵模式是Redis的高可用解决方案之一&#xff0c;它旨在提供自动故障转移和故障检测的功…