【leetcode刷题】面试经典150题 , 27. 移除元素

leetcode刷题
面试经典150
27. 移除元素
难度:简单

文章目录

  • 一、题目内容
  • 二、自己实现代码
    • 2.1 方法一:直接硬找
      • 2.1.1 实现思路
      • 2.1.2 实现代码
      • 2.1.3 结果分析
    • 2.2 方法二:排序整体删除再补充
      • 2.1.1 实现思路
      • 2.1.2 实现代码
      • 2.1.3 结果分析
  • 三、 官方解法
    • 3.1 双指针
      • 3.1.1 算法实现
      • 3.1.2 代码实现
      • 3.1.3 代码分析
    • 3.2 通用的
  • 四、一些注意的地方

一、题目内容

给你一个数组 nums 和一个值 v a l val val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 v a l val val 的元素数量为 k k k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k k k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 不相等的元素数 k k k

二、自己实现代码

2.1 方法一:直接硬找

2.1.1 实现思路

  • 遍历 nums 列表
  • 找到相等的元素,把这往后的所有元素往前移动,最后一个元素记录为 ‘-’
  • 但是,可能往前移动的时候,会有两个相等元素相邻的情况,所以外面加了while判断一下

2.1.2 实现代码

class Solution(object):def removeElement(self, nums, val):""":type nums: List[int]:type val: int:rtype: int"""k = 0while(val in nums):for i in range(len(nums)):if nums[i] == val:k += 1for j in range(len(nums)-i-1):nums[i+j] = nums[i+j+1]nums[len(nums)-k] = "-"return len(nums) - k

2.1.3 结果分析

在这里插入图片描述

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

2.2 方法二:排序整体删除再补充

2.1.1 实现思路

  • 找到有多少个不用的元素
  • 将所有 v a l val val删掉
  • 在删除后的nums上补充“-”

2.1.2 实现代码

class Solution(object):def removeElement(self, nums, val):""":type nums: List[int]:type val: int:rtype: int"""nums.sort()diff = len(nums) - nums.count(val)while val in nums:nums.remove(val)for i in range(diff):   nums.append("-")return diff

2.1.3 结果分析

在这里插入图片描述

三、 官方解法

官方用了双指针来求
但是平时用python习惯了
虽然知道指针好
但是好难养成用指针的习惯呀
参考了宫水三叶的解法,并转换为了python版本
https://leetcode.cn/problems/remove-element/solutions/575555/shua-chuan-lc-shuang-bai-shuang-zhi-zhen-mzt8/

3.1 双指针

3.1.1 算法实现

分成两个阶段

  1. 前面:存储不等于 v a l val val的元素
  2. 后面:存储= v a l val val的元素
  • 直接一个新的 j j j,相等的跳过,不相等的往下填写到数组里进行覆盖

3.1.2 代码实现

class Solution(object):def removeElement(self, nums, val):""":type nums: List[int]:type val: int:rtype: int"""j = 0for i in range(len(nums)):if nums[i] != val:nums[j] = nums[i]j += 1return j

3.1.3 代码分析

在这里插入图片描述

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

3.2 通用的

和26题目解法有关,还没有写到,等写到了再看吧

四、一些注意的地方

  1. 多想一想双指针,用下来真的会方便好多

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

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

相关文章

除了等保2.0,还有哪些法规涉及云计算数据安全?

除了中国的等保2.0之外,全球范围内有多个法律法规涉及云计算数据安全,这些法规根据不同国家和地区的特点,对数据保护、隐私、跨境数据流动等方面提出了不同的要求。以下是一些主要的国际法规: 1. 欧盟通用数据保护条例 (GDPR)&am…

字符串专题详解

目录 字符串hash进阶 KMP算法 next数组 KMP算法 KMP算法优化 字符串hash进阶 字符串hash是指将一个字符串S映射为一个整数,使得该整数可以尽可能唯一地代表字符串S。那么在一定程度上,如果两个字符串转换成的整数相等,就可以认为这两个…

麻了,5年Java竟然不知道幂等......

在分布式系统中,接口幂等性是确保操作一致性的关键特性。 啥是幂等性 幂等性 指的是在给定的条件下,无论操作执行多少次,其结果都保持不变。在接口设计中,幂等性意味着使用相同的参数多次调用接口,应产生与单次调用相…

STM32学习笔记(五)--TIM输出比较PWM详解

(1)配置步骤1.配置RCC外设时钟 开启GPIO以及TIM外设2.配置时基单元的时钟 包含时钟源选择配置初始化时基单元3.配置输出比较单元 包含CCR的值 输出比较模式 极性选择 输出使能等4.配置GPIO口 初始化为复用式推挽输出的配置5.运行控制 启动计数器 输出PWM…

Windows CSC服务特权提升漏洞(CVE-2024-26229)

文章目录 前言声明一、漏洞描述二、漏洞成因三、影响版本四、漏洞复现五、CVE-2024-26229 BOF六、修复方案 前言 Windows CSC服务特权提升漏洞。 当程序向缓冲区写入的数据超出其处理能力时,就会发生基于堆的缓冲区溢出,从而导致多余的数据溢出到相邻的…

QT 的文件

QT 和C、linux 一样,也有自带的文件系统. 它的操作和C、c差不多,不过也需要我们来了解一下。 输入输出设备类 QObject 有一个子类,名为 QIODevice 类,如其名字,该类是管理所有输入输出设备的类。 比如文件、网络套…

北大oj Coins

Problem: 北大oj Coins 文章目录 思路解题方法复杂度Code 思路 题目要求我们找出所有可能组成的金额总数,给定一系列硬币面值和每种硬币的数量。我们使用动态规划来解决这个问题。关键在于如何处理每种硬币数量大于1的情况,这需要对余数进行分组&#xf…

主键索引与唯一索引的区别

主键索引与唯一索引的区别: 1、主键索引是一种约束,唯一索引是一种索引,两者在本质上是不同的。 2、主键索引创建后一定包含一个唯一索引,唯一索引不一定包含主键索引。 3、主键索引不允许为空,唯一索引可以为空。 …

【ic-tool】timegen使用

一、前言 TimeGen是一个用于时序波形编辑的CAD工具,它允许数字设计工程师快速有效地绘制数字时序图。TimeGen时序图可以很容易地导出到其他窗口程序,如microsoftword,用于编写设计规范。可直接从官网下载TimeGEN软件:TimeGen Pro…

vue音乐播放条

先看效果 再看代码 <template><div class"footer-player z-30 flex items-center p-2"><div v-if"isShow" class"h-12 w-60 overflow-hidden"><div :style"activeStyle" class"open-detail-control-wrap&…

有什么可以创建ai聊天的软件?5个软件帮助你快速创建ai聊天

有什么可以创建ai聊天的软件&#xff1f;5个软件帮助你快速创建ai聊天 AI聊天软件是一种利用人工智能技术构建的聊天机器人系统&#xff0c;它能够模拟人类的对话方式&#xff0c;回答用户提出的问题或者进行对话。这类软件在各个领域都有广泛的应用&#xff0c;可以用于客户服…

【产品经理】订单处理5-可售库存管理

可售库存即销售库存&#xff0c;本文讲解订单处理过程中的可售库存的管理。 本次讲解订单处理过程中的可售库存的管理。 可售库存即销售库存&#xff0c;电商ERP中的可售库存共分三种&#xff1a;商品的可售现货库存、商品的预售库存以及赠品的可售库存。 一、商品的可售现货…

Gobject tutorial 五

参考&#xff1a;GObject – 2.0: Type System Concepts Type System Concepts The GLib Dynamic Type System 在GLib中&#xff0c;类型的概念比通常所理解的Ojbect type更宽泛。我们将对新类型注册到类型系统时使用的函数及数据结构进行了解&#xff0c;来对此进行说明。 …

大数据之flink与hive

其实吧我不太想写flink&#xff0c;因为线上经验确实不多&#xff0c;这也是我需要补的地方&#xff0c;没有条件创造条件&#xff0c;先来一篇吧 flink&#xff1a; 高性能 低延迟 流批一体的分布式计算框架 基于事件时间 对实时数据精准处理 快速响应 支持批处理&#xff0c…

腾讯云点播ugc upload | lack signature 问题处理

我犯一个很傻的错误 参考腾讯云官方文档&#xff1a;云点播 Web 端上传 SDK-开发指南-文档中心-腾讯云 进行开发&#xff0c;但是却报错了&#xff0c;始终找不到问题&#xff0c;错误提示&#xff1a;ugc upload | lack signature&#xff0c;意思是缺少签名或者签名失败&…

Python基础用法 之 转义字符

将两个字符进⾏转义 表示⼀个特殊的字符 \n ---> 换⾏&#xff0c;回⻋ \t ---> 制表符, tab键 注意&#xff1a; print( end\n)&#xff1a; print() 函数中默认有⼀个 end\n, 所以,每个 print 结束之后, 都会输出⼀ 个换行。 未完待续。

HTML中的资源提示关键词

渲染阻塞问题 之前在学习浏览器的渲染原理的时候我们就知道&#xff1a;因为浏览器一次只能开启一个渲染主线程&#xff0c;所以当浏览器解析到script标签时会停止DOM树的构建&#xff0c;转而去执行script&#xff0c;如果script中引用的是外部脚本&#xff0c;则浏览器会先从…

MySQL Server和Server启动程序(一)

MySQL Server mysqld&#xff0c;也称为MySQL Server&#xff0c;是一个单线程多任务的程序&#xff0c;它在MySQL安装中执行大部分工作。它不会生成额外的进程。MySQL Server管理对包含数据库和表的MySQL数据目录的访问。数据目录也是其他信息&#xff08;如日志文件和状态文…

目标检测:NMS代码

非极大值抑制NMS是目标检测常用的后处理算法&#xff0c;用于剔除冗余检测框 总体概要&#xff1a; 对NMS进行分类&#xff0c;大致可分为以下六种&#xff0c;这里是依据它们在各自论文中的核心论点进行分类&#xff0c;这些算法可以同时属于多种类别。 分类优先&#xff1a;…

基于mysqlbinlog恢复数据

1、把binlog转换为SQL mysqlbinlog --base64-outputdecode-rows -vv /usr/local/mysql/log-bin/mysql-bin.000003 >result.sql find / -name result.sql 2、查看events show binlog events in mysql-bin.000003; 3、回滚到3667那一行的数据 mysqlbinlog -v /usr/local/mys…