跟着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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络名称空间和虚拟机有何区别

在Linux系统中&#xff0c;网络名称空间和虚拟机都是实现资源隔离和虚拟化的技术&#xff0c;但它们在设计理念、实现机制、资源消耗、使用场景等方面存在着显著的区别。本文旨在全方位、系统性地分析这两种技术的区别。&#x1f50d; 1. 设计理念与实现机制 1.1. 网络名称空…

中国软件商业模式

很多IT技术人、风险投资人这些年进入SaaS产业&#xff0c;写了大量的文章来诊断中国软件产业。 我只是看过去十年的中国软件百强&#xff0c;这是事实上在中国这片土地上长出来并且跑出来的厂商。实践是检验一切真理的唯一标准。说美国怎么样怎么样&#xff0c;中国甲方企业和中…

MMYOLO调试RTMDet--小数据集split_ss_dota_200

背景 用MMYOLO调试旋转目标检测时需要用到dota数据集&#xff0c;根据MMYOLO的官方教程&#xff0c;dota数据集经过处理后变为split_ss_dota&#xff0c;但是该数据集还是很大&#xff0c;对于一些配置比较低的机器要调试比较麻烦&#xff0c;所以这里针对该数据集&#xff0c…

从0到1实现RPC | 09 故障隔离与恢复

一、应用场景 故障隔离解决的是&#xff1a;当服务提供者provider出现异常时&#xff0c;消费者consumer就不再调用异常实例&#xff0c;而是选择好的实例&#xff0c;避免频繁出错。 故障恢复解决的是&#xff1a;一段时间过后&#xff0c;服务提供者provider可以正常提供服…

Python+Selenium+Unittest 之Unittest5(常用装饰器-跳过用例执行)

目录 1、unittest.skip()&#xff08;跳过该装饰器下的用例&#xff09; 2、unittest.skipIf()&#xff08;跳过该装饰器下判断条件为True的用例&#xff09; 3、unittest.skipUnless()&#xff08;跳过该装饰器下判断条件为False的用例&#xff09; 4、unittest.expectedF…

Thingsboard PE智慧运维仪表板实例(二)【智慧排口截污实例】

ThingsBoard 的仪表板是一个用于可视化和监控物联网数据的重要组件。 它具有以下特点: 1. 可定制性:用户可以根据自己的需求创建各种类型的图表、表格和指标。 2. 数据可视化:以直观的方式展示设备数据,帮助用户快速了解系统状态。 3. 实时更新:实时反映设备的最新数据…

【RV1106的ISP使用记录之一】基础环境搭建

公司缺少ISP工程师&#xff0c;做为图像算法工程师的我这就不就给顶上来了么&#xff0c;也没给发两份工资&#xff0c;唉~ 先写个标题&#xff0c;占一个新坑&#xff0c;记录RK平台的传统ISP工作。 一、基础环境的硬件包括三部分&#xff1a; 1、相机环境&#xff0c;用于采…

【示例】MySQL-4类SQL语言-DDL-DML-DQL-DCL

前言 本文主要讲述MySQL中4中SQL语言的使用及各自特点。 SQL语言总共分四类&#xff1a;DDL、DML、DQL、DCL。 SQL-DDL | Data Definition Language 数据定义语言&#xff1a;用来定义/更改数据库对象&#xff08;数据库、表、字段&#xff09; 用途 | 操作数据库 # 查询所…

蓝桥杯嵌入式之ADC采集(R37、R38电位器上的电压)

一、CubeMX配置 R37------->ADC2_IN15 PB15 R38------->ADC1_IN11 PB12 1.ADC1的配置 2.ADC2的配置 二、ADC头文件、源文件 1.头文件 #ifndef __ADC_H__ #define __ADC_H__ #include "main.h"u32 GetADC_Value( ADC_HandleTypeDef *hadc); #end…

2024高交会-2024深圳高新技术展-高新技术成果交易会

2024高交会-2024深圳高新技术展-2024高新技术成果展-中国高校技术交易会-第26届高交会-深圳高交会-深圳高科技展-深圳新科技展-深圳高新技术成果展 第二十六届中国国际高新技术成果交易会&#xff08;简称高交会&#xff09; 时间&#xff1a;2024年11月15日-19日 地址&#…

牛客 NC252 多数组中位数【中等 模拟 Java,Go】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/b6bb0bce88894108bfc23e9b7b012420 思路 模拟&#xff0c;2数组合并一个数组helphelp长度为奇数&#xff0c;直接取中间值&#xff0c;为偶数&#xff0c;中间2个值&#xff0c;哪个小返回哪个参考答案Java imp…

Post表单提交后端接不到参数

项目背景&#xff1a; 框架&#xff1a;Springboot 版本&#xff1a;1.5.6.REAEASE 问题描述 Postman通过表单提交请求时后端接不到值 原因分析&#xff1a; 启动项中注入其他Bean时取名叫dispatcherServlet&#xff0c;当发现http接口无法访问时&#xff0c;原开发人员又…