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

news2024/12/23 5:48:40

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。

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

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

相关文章

AUTOSAR组织引入了Rust语言的原因是什么?有哪些好处?与C++相比它有什么优点?并推荐一些入门学习Rust语言链接等

AUTOSAR(汽车开放系统架构)是一个由汽车制造商、供应商和其他来自电子、半导体和软件行业的公司组成的全球发展伙伴关系,自2003年以来一直致力于为汽车行业开发和引入开放、标准化的软件平台。 AUTOSAR 最近宣布成立一个新的工作组,用于探索在汽车软件中使用 Rust 编程语言…

【网络安全】网络防护之旅 - 点燃网络安全战场的数字签名烟火

​ &#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《网络安全之道 | 数字征程》⏰墨香寄清辞&#xff1a;千里传信如电光&#xff0c;密码奥妙似仙方。 挑战黑暗剑拔弩张&#xff0c;网络战场誓守长。 ​ 目录 &#x1f608;1. 初识…

2023年总结,讲讲我的故事吧,十年

文章目录 2023前十年后十年 周末&#xff0c;本该是提升自己的最好时机&#xff0c;也该是出去玩的大好时光&#xff0c;但是毫无意外的&#xff0c;在家躺了一天&#xff0c;单纯的有点累。 2023年&#xff0c;发生了好多事情&#xff0c;又好像没发生几件事&#xff0c;可能毕…

录制第一个jmeter性能测试脚本2(http协议)_图书管理系统

我们手工编写了一个测试计划&#xff0c;现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似&#xff1a;让5个用户在2s内登录图书管理系统&#xff0c;然后进入 页面进行查看。 目录 欢迎访问我的免费课程 PPT、安装包、视频应有尽有&#xff…

Linux Shell——输入输出重定向

输入输出重定向 1. 重定向输入2. 重定向输出 总结 最近学习了shell语法&#xff0c;总结一下关于输入输出重定向的知识。 一般情况下&#xff0c;linux每次执行命令其实都会打开三个文件&#xff0c;分别是&#xff1a; 标准输入stdin 文件描述符为0 标准输出stdout 文件描述符…

mysql8支持远程访问

上面的localhost要改为%号就打开了远程访问 ALTER USER root% IDENTIFIED WITH mysql_native_password BY fengzi2141;

NSSCTF第16页(2)

[NSSRound#4 SWPU]1zweb(revenge) 查看index.php <?php class LoveNss{public $ljt;public $dky;public $cmd;public function __construct(){$this->ljt"ljt";$this->dky"dky";phpinfo();}public function __destruct(){if($this->ljt"…

Python将列表中的数据写入csv并正确解析出来

用Python做数据处理常常会将数据写到文件中进行保存&#xff0c;又或将保存在文件中的数据读出来进行使用。通过Python将列表中的数据写入到csv文件中很多人都会&#xff0c;可以通过Python直接写文件或借助pandas很方便的实现将列表中的数据写入到csv文件中&#xff0c;但是写…

C语言—小小圣诞树

这个代码会询问用户输入圣诞树的高度&#xff0c;然后根据输入的高度在控制台上显示相应高度的圣诞树。 #include <stdio.h>int main() {int height, spaces, stars;printf("请输入圣诞树的高度: ");scanf("%d", &height);spaces height - 1;st…

【MySQL】触发器trigger / 事件

文章目录 1. 触发器 trigger1.1 触发器命名1.2 new和old关键字1.3 案例&#xff1a;insert 触发器1.4 练习&#xff1a;delete 触发器1.5 查看触发器 show triggers1.6 使用触发器记录对表的操作 2 事件2.1 打开 / 关闭事件调度器2.2 创建事件 create event2.3 查看&#xff0c…

idea__SpringBoot微服务11——整合Druid数据源(新依赖)(新注解)

整合JDBC 一、导入依赖二、配置Druid————————创作不易&#xff0c;如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶&#xffe3;)&#xff0c;谢谢~~ 接着 第10的 新注解&#xff1a; ConfigurationProperties ConfigurationPropert…

流量分析基础

定义&#xff1a; 流量分析&#xff08;Traffic Analysis&#xff09;是指对网络流量数据进行分析和解释&#xff0c;以获得有关网络中通信的信息和情报。这种技术可以用于网络安全、网络管理和网络优化等领域。 网络流量包含了许多有关网络通信的细节信息&#xff0c;如源IP地…

【教3妹学编程-算法题】使用最小花费爬楼梯

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 3妹&#xff1a;2哥2哥&#xff0c;你有没有看到新闻&…

2023/12/17 初始化

普通变量&#xff08;int,float,double变量&#xff09;初始化&#xff1a; int a0; float b(0); double c0; 数组初始化&#xff1a; int arr[10]{0}; 指针初始化&#xff1a; 空指针 int *pnullptr; 被一个同类型的变量的地址初始化&#xff08;赋值&#xff09; int…

必要时进行保护性拷贝

保护性拷贝&#xff08;Defensive Copy&#xff09;是一种常见的编程实践&#xff0c;用于在传递参数或返回值时&#xff0c;创建副本以防止原始对象被意外修改。以下是一个例子&#xff0c;展示了何时进行保护性拷贝&#xff1a; mport java.util.ArrayList; import java.uti…

昇腾Profiling性能分析工具使用问题案例

昇腾Profiling性能分析工具用于采集和分析运行在昇腾硬件上的AI任务各个运行阶段的关键性能指标, 用户可根据输出的性能数据&#xff0c;快速定位软、硬件性能瓶颈&#xff0c;提升AI任务性能分析的效率。具体使用方法请参考&#xff1a; 本期分享几个关于Profiling性能分析工具…

Linux开发工具--vim

Linux开发工具--vim 一、vim的基本概念二、常见命令三、简单配置vim配置文件的位置常用配置选项&#xff0c;用来测试使用插件 一、vim的基本概念 vim编辑器&#xff0c;只负责写代码&#xff0c;vim是一款多模式的编辑器 vim的三种模式(其实有好多模式&#xff0c;目前掌握这…

patchless amsi学习(上)

传统的通过patch内存AmsiScanBuffer,这个网上有很多文章&#xff0c;而且相对也比较简单&#xff0c;这里就不再解释了&#xff0c;但是patch这个动作势必会有一定的敏感性&#xff0c;比如你需要修改关键位置内存属性。本文要讲的是无需patch的方式绕过amsi。 前置知识-硬件断…

wordpress:6.3的docker部署和k8s部署方式

wordpress:6.3的docker部署 一.docker部署mysql5.7数据库 docker pull mysql:5.7 mkdir -p /data/mysql/data /data/mysql/logs /data/mysql/conf touch /data/mysql/conf/my.cnf docker run --restartalways -p 13306:3306 --name mysql -v /data/mysql/conf:/etc/mysql/con…

极兔速递物流查询,用表格导出单号的每一条物流信息

批量查询极兔速递单号的物流信息&#xff0c;并以表格的形式导出单号的每一条物流信息。 所需工具&#xff1a; 一个【快递批量查询高手】软件 极兔速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册…