LeetCode--27. 移除元素(双指针)
移除元素(C, Python)
- 1. 题目描述
- 2. 题目分析
- 3. C语言实现
- 3.1 双指针排序法
- 3.2 双指针乱序法
- 4. Python实现
1. 题目描述
难度:简单
2. 题目分析
该题和26题很类似,解法也一样,需要注意的是一下几点:
- 给定的输入数组是已经未排序的
- 需要在原地删除重复的元素,也就是说我们不可以在重新定义数组来存放结果,需要对原数组进行修改
- 返回的是修改之后数组的长度,而不是数组本身
- 不需要考虑数组中超出新长度后面的元素,也就是说,我们可以将原数组的前一部分更新为我们想要的结果,然后返回这部分的长度即可,不需要考虑着部分之后的元素是否也符合要求。举个例子:
a = [0,0,1,1,2,2,2,3] 修改之后的a=[0,1,2,3,2,2,3] 我们只需要返回长度为4的a即[0,1,2,3]这一部分就可以了。
有三种方法:
- 遍历元素法
所谓的遍历元素法就是依次遍历数组,如果该元素与目标值相同,那么就将这个元素删除,该方法比较适合用python来实现。 - 双指针排序法
先对数组进行快速排序,双指针法数组完成排序后,我们可以放置两个指针 i和 j,其中 i 是慢指针,而 j 是快指针。只要 nums[i] = nums[j],我们就增加 j 以跳过重复项。
当我们遇到 nums[j] != nums[i]时,跳过重复项的运行已经结束,因此我们必须把它(nums[j])的值复制到 nums[i + 1]。然后递增 i,接着我们将再次重复相同的过程,直到 j 到达数组的末尾为止。 - 双指针乱序法
不用对数组进行排序,直接用双指针法移除元素
3. C语言实现
3.1 双指针排序法
代码如下:
// 对于整型变量的快速排序
int inc (const void * a,const void *b)
{return *(int *)a - *(int *)b;
}int removeElement(int* nums, int numsSize, int val){int i=0, j=0;// 对数组nums进行快速排序qsort(nums, numsSize, sizeof(nums[0]), inc);// 进行筛选for(j = 0; j < numsSize; j++){if(nums[j] != val){nums[i] = nums[j];i++;}}// 返回数组长度return i;
}
执行结果为:
3.2 双指针乱序法
代码如下:
int removeElement(int* nums, int numsSize, int val){int i=0, j=0;for(j = 0; j < numsSize; j++){if(nums[j] != val){nums[i] = nums[j];i++;}}return i;
}
输出结果为:
4. Python实现
遍历数组法代码如下:
class Solution:def removeElement(self, nums: List[int], val: int) -> int:i = 0while(i != len(nums)):if nums[i]==val:del nums[i] else:i += 1 return len(nums)
运行结果为:
LeetCode--27. 移除元素(双指针)相关推荐
- lrange是取出所有值并移除么_图解双指针 | LeetCode 27. 移除元素
题目描述 原题链接:LeetCode 27. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 ...
- LeetCode 27.移除元素
原题链接 /** @lc app=leetcode.cn id=27 lang=cpp** [27] 移除元素标签:拷贝覆盖主要思路是遍历数组nums,每次取出的数字变量为num,同时设置一个下标an ...
- LeetCode 27 移除元素 题解
力扣链接:27.移除元素 要求:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组.元素的顺序可以改变.你不需要考虑数组中超出新长度后面的元素. 方法一: 思路:利用双指针,头 ...
- LeetCode 27移除元素28实现strStr()29两数相除
维护幸苦,如有打卡欢迎关注公众号bigsai回复进群,如有帮助欢迎点赞支持! 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长 ...
- 9. Leetcode 27. 移除元素 (数组-同向双指针-快慢指针)
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度.不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组.元素 ...
- leetcode 27. 移除元素(双指针)
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组. ...
- [leetcode]27.移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组. ...
- LeetCode 27.移除元素 思考分析
题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数 ...
- LeetCode 27.移除元素
文章目录
- Leetcode 704.二分查找 27.移除元素 代码随想录day1
本系列目的在于跟练代码随想录,以及记录自己在数据结构与算法方面的一些学习 704.二分查找 其实之前自己在随便刷题的时候看过这道题目,就是一个纯新手的大状态,第一次听到二分查找这样的东西,然后跟着题解 ...
最新文章
- blank space in latex math environment
- @suppressWarnings(unchecked)及其相关属性在Java中意思
- php phpredis,PHP_PHP中redis的用法深入解析,redis是一个key-value存储系统。 - phpStudy...
- 深圳职业技术学院计算机专业组代码,深圳职业技术学院代码是多少 有哪些优势专业...
- java xml转html_如何在Java中将XML文档转换成HTML文档.pdf
- 杭电 2838 牛叉的树状数组
- RGB888和RGB565颜色对照表
- 计算机win10无法打开小键盘,win10数字小键盘开机不启动解决方法
- 拍牌神器是怎样炼成的(一)--- 键鼠模拟之WinAPI
- C语言根据国家英文首字母进行排序
- TikTok企业号的功能
- 从B 树、B+ 树、B* 树
- 85 R 银行信用卡风控评分数据分析
- 南京大学网络教育计算机第二次作业,南京大学网络学院计算机基础第二次作业...
- python中的模块和类_Python模块与类
- 制造业案例 - Splashtop 助力南通中集实现远程技术支持
- 拉格朗日插值公式 插值法 简单例子 BIT数值分析5.1+8
- Windows下使用navicat连接远程数据库(带navicat安装包和pojie工具)!亲测有效!
- 架构——自包含系统(SCS)
- 2022年 Unity3D VS UE4经典大作比拼