移除元素(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. 移除元素(双指针)相关推荐

  1. lrange是取出所有值并移除么_图解双指针 | LeetCode 27. 移除元素

    题目描述 原题链接:LeetCode 27. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 ...

  2. LeetCode 27.移除元素

    原题链接 /** @lc app=leetcode.cn id=27 lang=cpp** [27] 移除元素标签:拷贝覆盖主要思路是遍历数组nums,每次取出的数字变量为num,同时设置一个下标an ...

  3. LeetCode 27 移除元素 题解

    力扣链接:27.移除元素 要求:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组.元素的顺序可以改变.你不需要考虑数组中超出新长度后面的元素. 方法一: 思路:利用双指针,头 ...

  4. LeetCode 27移除元素28实现strStr()29两数相除

    维护幸苦,如有打卡欢迎关注公众号bigsai回复进群,如有帮助欢迎点赞支持! 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长 ...

  5. 9. Leetcode 27. 移除元素 (数组-同向双指针-快慢指针)

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度.不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组.元素 ...

  6. leetcode 27. 移除元素(双指针)

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组. ...

  7. [leetcode]27.移除元素

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组. ...

  8. LeetCode 27.移除元素 思考分析

    题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数 ...

  9. LeetCode 27.移除元素

    文章目录

  10. Leetcode 704.二分查找 27.移除元素 代码随想录day1

    本系列目的在于跟练代码随想录,以及记录自己在数据结构与算法方面的一些学习 704.二分查找 其实之前自己在随便刷题的时候看过这道题目,就是一个纯新手的大状态,第一次听到二分查找这样的东西,然后跟着题解 ...

最新文章

  1. blank space in latex math environment
  2. @suppressWarnings(unchecked)及其相关属性在Java中意思
  3. php phpredis,PHP_PHP中redis的用法深入解析,redis是一个key-value存储系统。 - phpStudy...
  4. 深圳职业技术学院计算机专业组代码,深圳职业技术学院代码是多少 有哪些优势专业...
  5. java xml转html_如何在Java中将XML文档转换成HTML文档.pdf
  6. 杭电 2838 牛叉的树状数组
  7. RGB888和RGB565颜色对照表
  8. 计算机win10无法打开小键盘,win10数字小键盘开机不启动解决方法
  9. 拍牌神器是怎样炼成的(一)--- 键鼠模拟之WinAPI
  10. C语言根据国家英文首字母进行排序
  11. TikTok企业号的功能
  12. 从B 树、B+ 树、B* 树
  13. 85 R 银行信用卡风控评分数据分析
  14. 南京大学网络教育计算机第二次作业,南京大学网络学院计算机基础第二次作业...
  15. python中的模块和类_Python模块与类
  16. 制造业案例 - Splashtop 助力南通中集实现远程技术支持
  17. 拉格朗日插值公式 插值法 简单例子 BIT数值分析5.1+8
  18. Windows下使用navicat连接远程数据库(带navicat安装包和pojie工具)!亲测有效!
  19. 架构——自包含系统(SCS)
  20. 2022年 Unity3D VS UE4经典大作比拼

热门文章

  1. python 打包exe_将python文件打包exe独立运行程序方法详解
  2. 细数判断数据类型的各种方法
  3. lc 115. Distinct Subsequences
  4. Linux--Tail命令
  5. How to debug WCF in local
  6. 算法导论-VLSI芯片测试问题
  7. Android RecyclerView(九)滑动监听综述
  8. 安卓开发——锁定软件——输入密码后重复弹出输入密码窗口的解决方法
  9. Mr.J--蓝桥杯--明明的随机数
  10. std::string与MFC的CString的比较