跟着Carl大佬学leetcode之27 移除元素

来点强调,刷题是按照代码随想录的顺序进行的,链接如下https://www.programmercarl.com/本系列是记录一些刷题心得和学习过程,就看到题目自己先上手试试,然后看程序员Carl大佬的解释,自己再敲一遍修修补补,练题的小伙伴还是跟着大佬的解释比较系统

文章目录

  • 每日碎碎念
  • 一、题目要求及测试点
    • 27 移除元素
      • 说明
    • 测试点
    • 提示
  • 二、题解
    • 自己上手
    • 正经题解
      • 双指针法(快慢指针法)
  • 三、总结


每日碎碎念

苦痛生活继续
hello LeetCode,今天是数组移除元素专项刷题…


一、题目要求及测试点

27 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
链接https://leetcode.cn/problems/remove-element/description/

说明

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

测试点

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,3,0,4]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示

  1. 0 <= nums.length <= 100
  2. 0 <= nums[i] <= 50
  3. 0 <= val <= 100

二、题解

自己上手

代码如下:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) { 
        int count = 0;
        for (int i = 0; i < nums.size(); i++){ 
            if (nums[i] != val)
                count++; 
        }
        //i是快指针遍历,j是满指针指向填充值
        int j = 0;
        for (int i = 0; i < nums.size(); i++){ 
            if (j >= count)
                nums.pop_back(); 
            if (nums[i] != val){ 
                nums[j] = nums[i]; 
                j++; 
            }
        }
        return count;
    }
};

在这里插入图片描述

来点无用总结:
时间复杂度O(n),空间复杂度O(1),第一次先计算还剩多少非val的数,统计数量后,第二次遍历把非val的数一个个往前填(j控制),最后的数全部删去,返回数量

正经题解

暴力解法也可,但循环嵌套O( n 2 n^2 n2),不做展开,讲解快慢指针法,自己上手的做法是快慢指针,但for跑了两次,下面展示放在一个for里完成的
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置

双指针法(快慢指针法)

class Solution {
public:
    int removeElement(vector<int>& nums, int val) { 
        int slowIndex = 0; 
        for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++){ 
            if (nums[fastIndex] != val)
                nums[slowIndex++] = nums[fastIndex]; 
        }
        return slowIndex;
    }
};

在这里插入图片描述

代码看起来简洁了,因为>len的元素不会被打印所以不用删,时间复杂度:O(n),空间复杂度:O(1)


三、总结

1.学到了nums.pop_back(),删除数列最后一个数
2.快慢指针的思想get

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

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

相关文章

数组与伪数组的区别

大家都知道&#xff0c;在js中使用 document.querySelectorAll(选择器&#xff09;获取到的为该选择器能选择到的所有元素组成的伪数组&#xff0c;所谓伪数组&#xff0c;就是外表和数组一样&#xff0c;能够使用索引遍历&#xff0c;但本质是对象。 数组与伪数组之间的区别&…

C语言面试题之合法二叉搜索树

合法二叉搜索树 实例要求 实现一个函数&#xff0c;检查一棵二叉树是否为二叉搜索树&#xff1b; 示例 1: 输入:2/ \1 3 输出: true 示例 2: 输入:5/ \1 4/ \3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 &#xff0c;但是其右子节点值为 4 …

测试开发是“懂测试的开发”还是“懂开发的测试”?

这是个很有意思的话题&#xff0c;我一开始画了这么一张图&#xff1a; 就我自身的工作而言&#xff0c;用着开发的技术&#xff0c;做着开发差不多的工作。归为开发一类并无不妥&#xff01; 后来&#xff0c;我细细琢磨了一下&#xff0c;改为了下图。 其实答案也非常明显&a…

动态调整学习率方法(仅供自己学习)

目录 一、StepLR 二、MultiStepLR 三、ExponentialLR 四、CosineAnnealingLR 五、ReduceLRonPlateau 六、LambdaLR 小结&#xff1a;学习率调整​​​​​​​ 一、StepLR optimizer torch.optim.SGD(model.parameters(), lrlearn_rate) scheduler torch.optim.lr_sch…

Linux目录结构知识

一、认识Linux目录 1) Linux目录结构知识 1&#xff09; win: 目录顶点是盘符 C/D/E 。所有的目录结构都在不同的盘符下面&#xff0c;不同的盘之间不能沟通的。 2&#xff09; Linux: 目录顶点是 / &#xff0c;称为根。所有的目录结构都在根下面&#xff0c;他的目录之间都…

Day37:LeedCode 738.单调递增的数字 968.监控二叉树 蓝桥杯 翻转

738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9 思路: 假设这个数是98,…

MuJoCo 入门教程(八)Model仓库

系列文章目录 前言 一、MuJoCo 动物园 一个物理仿真器的好坏取决于它所仿真的模型&#xff0c;而在像 MuJoCo 这样功能强大、建模选项众多的仿真器中&#xff0c;很容易创建出行为与预期不符的 "坏 "模型。MuJoCo Menagerie 的目标是为社区提供一个设计精良、开箱即用…

WinRAR再爆0 day漏洞,0 day漏洞该如何有效预防

WinRAR再爆0 day漏洞&#xff0c;已被利用超过4个月。 Winrar是一款免费的主流压缩文件解压软件&#xff0c;支持绝大部分压缩文件格式的解压&#xff0c;全球用户量超过5亿。Group-IB研究人员在分析DarkMe恶意软件时发现WinRAR在处理ZIP文件格式时的一个漏洞&#xff0c;漏洞…

内存管理机制SLAB

1. 为什么需要内存分配管理&#xff1f;为什么需要SLAB&#xff1f; 在学习c语言时&#xff0c;我们常常会使用到malloc()去申请一块内存空间&#xff0c;用于存放我们的数据&#xff0c;这是代码层面的语言 如果我们想要关心malloc这个命令向系统发出后&#xff0c;系统会做什…

javaee前后端交互

1.选择Java Enterprise创建项目 2.勾选Web Profile 3.项目名称 4.创建包和类 5.继承HttpServlet并重写方法doGet和doPost 6.在web.xml里添加代码 7.点击Add Configuration,进去后点击加号 8.选择选项 9.调整如图&#xff0c;后选择Deployment进入 10.点击加号选择第一个 11.…

【InternLM 实战营第二期笔记】使用茴香豆搭建你的RAG智能助理

RAG RAG是什么 RAG&#xff08;Retrieval Augmented Generation&#xff09;技术&#xff0c;通过检索与用户输入相关的信息片段&#xff0c;并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺乏透明、可追…

【vue】v-bind动态属性绑定

v-bind 简写:value <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

【赛题】2024年“认证杯”数模网络挑战赛赛题发布

2024年"认证杯"数学建模网络挑战赛——正式开赛&#xff01;&#xff01;&#xff01; 赛题已发布&#xff0c;后续无偿分享各题的解题思路、参考文献、完整论文可运行代码&#xff0c;帮助大家最快时间&#xff0c;选择最适合是自己的赛题。祝大家都能取得一个好成…

Python如何安装第三方模块

cmd窗口中使用pip install命令安装 1、键盘按下win R&#xff0c;然后在输入框中输入cmd&#xff0c;回车&#xff0c;就打开了cmd窗口。 下图的运行框会出现到屏幕左下角。 2、输入下面的命令&#xff0c;回车即可。 pip install xxx # xxx为要安装的模块名 如图所示&…

线程池参数如何设置

线程池参数设置 hello丫&#xff0c;各位小伙伴们&#xff0c;好久不见了&#xff01; 下面&#xff0c;我们先来复习一下线程池的参数 1、线程池参数有哪些&#xff1f; corePoolSize&#xff08;核心线程数&#xff09;&#xff1a;线程池中的常驻核心线程数。即使这些线程…

AI大模型日报#0411:国内首款音乐大模型、面壁智能数亿融资、MyScale AI开源

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 ​标题: 大模型做时序预测也很强&#xff01;华人团队激活LLM新能力&#xff0c;超越一众传统模型实现SOTA 摘要: 大语言模型通过新提…

Vue结合el-table实现合并单元格(以及高亮单元表头和指定行)

实现效果如下&#xff1a; 思路&#xff1a; 1.首先使用动态表头表格。 2.其次实现动态计算合并单元格。&#xff08;计算规则 传递需要合并的字段&#xff09; 3.然后封装公共的计算单元格方法 export导出供多个页面使用。 4.同时需要封装成公共的组件供多个页面使用。 5…

PostgreSQL入门到实战-第十九弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(三)官网地址PostgreSQL概述PostgreSQL中INNER JOIN命令理论PostgreSQL中INNER JOIN命令实战更新计划 PostgreSQL中表连接操作(三) 使用PostgreSQL INNER JOIN子句从多个表中选择数据。 官网地址 声明: 由于操作系统, 版本更新等…

Innodb架构解析

整体架构 通过《面试官&#xff1a;一条SQL是如何执行的&#xff1f;》我们了解了MySQL架构&#xff0c;下面我们看下Innodb架构。 innodb最早由Innobase Oy公司开发&#xff0c;5.5版本开始是MySQL默认存储引擎&#xff0c;该存储引擎是第一个完整支持ACID事务的MySQL存储引…

电子元器件商城开发用什么技术框架?

随着信息技术的飞速发展&#xff0c;电子元器件商城已成为电子工程师和采购人员获取元器件的重要渠道。电子元器件商城的开发涉及众多技术和开发语言的选择&#xff0c;本文将详细分析电子元器件商城开发中常用的技术和开发语言&#xff0c;以及它们各自的优势。 一、电子元器…