移除元素的两种方法

news/2024/10/30 19:24:49/

今日复习了数组部分,对以下题目做了一个整理。
27. 移除元素

这里将不再详细讲述两层for循环的暴力算法。其大致思路是:第一层for循环遍历每一个元素,找到值为val的元素之后,从该位置将每一个元素往前移动一位进行覆盖;整体数组长度减1。

解下来主要讲解两种方法:

方法1:

使用替换的方法,直接将等于val的元素(我们记为ele)用数组末尾元素nums[length]进行替代,然后将数组长度length减去1。这里需要注意的是代替元素ele的末尾元素nums[length]不一定不等于val,所以需要再检测一次,即i -= 1

class Solution:def removeElement(self, nums: List[int], val: int) -> int:length = len(nums) - 1 i = 0while i <= length:if nums[i] == val:nums[i] = nums[length]length -= 1i -= 1i += 1return length + 1

方法2

使用双指针方法求解,双指针在算法题里面非常常见,例如,在本人整理快速排序的时候就有使用到双指针。这里也可以使用相同的思路,将pre作为边界,左边是需要的元素,右边是不确定的元素。cur指针负责找需要的元素,这里是nums[cur] != val

class Solution:def removeElement(self, nums: List[int], val: int) -> int:pre = -1cur = pre + 1length = len(nums)while cur <= len(nums) - 1:if nums[cur] != val:pre += 1nums[pre] = nums[cur]else:length -= 1cur += 1return length

http://www.ppmy.cn/news/104082.html

相关文章

ssh无密码链接

ssh的基本语法为 ssh host 然后输入密码才可以 如果a想要免密登录b&#xff0c;则a需要将自己的公钥放在b上&#xff0c;原理如下图&#xff1a; 例如&#xff0c;以aricoder这个用户登录的情况下&#xff0c;在服务器01上生成密钥&#xff0c;命令为 ssh-keygen -t rsa然后连…

python基础知识(三):比较运算符、布尔运算符和位运算

目录 1. 比较运算符2. 布尔运算符3. 位运算 1. 比较运算符 比较运算符通常为以下6种&#xff1a; (1) 大于">“&#xff0c;比较两个数a、b的大小&#xff0c;比较的结果如果a大于b则为True&#xff0c;否则为False&#xff1b; (2) 大于等于”>“&#xff0c;比较…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版) Chapter 9 Recommendation Systems

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 9 Recommendation SystemsRecommendation systems use a number of different technologies. We can classify these systems into two broad groups. Content-based systems examine properties…

IntelliJ IDEA使用Alibaba Java Coding Guidelines编码规约扫描插件

代码规范和编码规约扫描插件使用 为什么要有代码规范&#xff1f;1.代码规范插件2.idea插件安装3.插件使用介绍编码规约扫描使用编码规约扫描结果 4.扫描结果严重级别BlockerCriticalMajor 5.《阿里巴巴Java开发手册&#xff08;终极版&#xff09;》 为什么要有代码规范&#…

leecode

leecode128,最长连续子序列&#xff0c;哈希表枚举&#xff0c;要注意技巧&#xff0c;判断num-1是否在哈希表中&#xff0c;可以降低时间复杂度。 class Solution:def longestConsecutive(self, nums: List[int]) -> int:nums_set set(nums)long_path 0for num in nums_…

有这个证书,网络安全工程师找工作不用愁

想要成为网络安全工程师&#xff0c;满足企业的用人要求。最基本的&#xff0c;你需要熟悉TCP/IP协议&#xff0c;熟悉sql注入原理和手工检测、熟悉内存缓冲区溢出原理和防范措施、熟悉信息存储和传输安全、熟悉数据包结构、熟悉Ddos攻击类型和原理。并且有一定的ddos攻防经验&…

给一个有序数组生成平衡搜索二叉树(java)

给一个有序数组生成平衡搜索二叉树 给一个有序数组生成平衡搜索二叉树递归生成二叉树专题 给一个有序数组生成平衡搜索二叉树 给定一个有序的数组,用这个数组生成一个平衡搜索二叉树. 这个题还是很简单的,知道什么时平衡搜索二叉树就行了, 左边值小于头节点值,头节点值小于右边…

Linux部署jumpserver堡垒机及问题汇总

部署过程相对复杂&#xff01;请耐心浏览&#xff01; 目录 一、jumpserver堡垒机简介 1.1 为什么需要使用堡垒机? 1.2 堡垒机主要功能 二、准备工作 2.1 关闭防火墙以及SElinux 1.2 时间同步 1.3 更改主机名 1.4 yum源备份及准备 1.5 安装初始工具 1.6 修改系统字…