现在网站的外部链接怎么做,广州牌手表网站,成都网站logo设计,婚恋注册leetcode刷题 面试经典150 27. 移除元素 难度#xff1a;简单 文章目录 一、题目内容二、自己实现代码2.1 方法一#xff1a;直接硬找2.1.1 实现思路2.1.2 实现代码2.1.3 结果分析 2.2 方法二#xff1a;排序整体删除再补充2.1.1 实现思路2.1.2 实现代码2.1.3 结果分析 三、… 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: intk 0while(val in nums):for i in range(len(nums)):if nums[i] val:k 1for j in range(len(nums)-i-1):nums[ij] nums[ij1]nums[len(nums)-k] -return len(nums) - k2.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: intnums.sort()diff len(nums) - nums.count(val)while val in nums:nums.remove(val)for i in range(diff): nums.append(-)return diff2.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 算法实现
分成两个阶段
前面存储不等于 v a l val val的元素后面存储 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: intj 0for i in range(len(nums)):if nums[i] ! val:nums[j] nums[i]j 1return j3.1.3 代码分析 时间复杂度O(n)空间复杂度O(1)
3.2 通用的 和26题目解法有关还没有写到等写到了再看吧 四、一些注意的地方
多想一想双指针用下来真的会方便好多