LeetCode 移除元素

题目描述

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不需要使用额外的数组空间,你必须仅使用 O(1)额外空间并原地修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例:

  1. 输入:nums = [3,2,2,3], val = 3
  2. 输出:2, nums = [2,2]
  3. 解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] nums = [2,2,0,0],也会被视作正确答案。
  1. 输入:nums = [0,1,2,2,3,0,4,2], val = 2
  2. 输出:5, nums = [0,1,4,0,3]
  3. 解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

Java 解法

  1. /**
  2. * 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
  3. * 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
  4. * 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
  5. *
  6. * @param nums 数组
  7. * @param val 判断值
  8. * @return 新数组的长度
  9. */
  10. public static int removeElement(int[] nums, int val) {
  11. int len = nums.length;
  12. if (len == 0) {
  13. return 0;
  14. }
  15. int i = 0;
  16. for (i = 0; i < len; i++) {
  17. if (nums[i] == val) {
  18. for (int j = i; j < len - 1; j++) {
  19. nums[j] = nums[j + 1];
  20. }
  21. i--;
  22. len--;
  23. }
  24. }
  25. return i;
  26. }
  27. /**
  28. * 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
  29. * 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
  30. * 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
  31. *
  32. * @param nums 数组
  33. * @param val 判断值
  34. * @return 新数组的长度
  35. */
  36. public static int removeElementTwo(int[] nums, int val) {
  37. int len = nums.length;
  38. if (len == 0) {
  39. return 0;
  40. }
  41. int i = 0;
  42. for (int j = 0; j < nums.length; j++) {
  43. if (nums[j] == val) {
  44. continue;
  45. }
  46. nums[i++] = nums[j];
  47. }
  48. return i;
  49. }

Java 解法效率对比

  1. 输入:nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};val = 2;
  2. 方法一:2666500ns
  3. 方法二:15300ns

Python 解法

  1. from typing import List
  2. def remove_element(nums: List[int], val: int) -> int:
  3. """
  4. 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
  5. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
  6. 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
  7. :param nums: 数组
  8. :param val: 判断值
  9. :return: 新数组的长度
  10. """
  11. n = len(nums)
  12. for i in range(n):
  13. if nums[i] == val:
  14. for j in range(n - 1):
  15. nums[j] = nums[j + 1]
  16. i -= 1
  17. n -= 1
  18. return i
  19. def remove_element_two(nums: List[int], val: int) -> int:
  20. """
  21. 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
  22. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
  23. 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
  24. :param nums: 数组
  25. :param val: 判断值
  26. :return: 新数组的长度
  27. """
  28. n = len(nums)
  29. i = 0
  30. for j in range(n):
  31. if nums[j] == val:
  32. continue
  33. else:
  34. nums[i] = nums[j]
  35. i += 1
  36. return i

Python 解法效率对比

  1. 输入:nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};val = 2;
  2. 方法一:60700ns
  3. 方法二:36200ns

LeetCode移除元素的更多相关文章

  1. LeetCode~移除元素(简单)

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

  2. 【数组】leetcode——移除元素

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

  3. leetcode 移除元素

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

  4. 前端与算法 leetcode 27.移除元素

    目录 # 前端与算法 leetcode 27.移除元素 题目描述 概要 提示 解析 算法 @(目录) # 前端与算法 leetcode 27.移除元素 题目描述 27.移除元素 概要 题目本身其实挺简 ...

  5. Java实现 LeetCode 27 移除元素

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

  6. 每日一道 LeetCode (8):删除排序数组中的重复项和移除元素

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  7. 【JavaScript】Leetcode每日一题-移除元素

    [JavaScript]Leetcode每日一题-移除元素 [题目描述] 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用 ...

  8. 【LeetCode】27.移除元素

    27.移除元素 知识点:数组:双指针:: 题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须 ...

  9. Leecode刷题之旅-C语言/python-26.移除元素

    /* * @lc app=leetcode.cn id=27 lang=c * * [27] 移除元素 * * https://leetcode-cn.com/problems/remove-elem ...

随机推荐

  1. Spring Security 的注册登录流程

    Spring Security 的注册登录流程 数据库字段设计 主要数据库字段要有: 用户的 ID 用户名称 联系电话 登录密码(非明文) UserDTO对象 需要一个数据传输对象来将所有注册信息发送 ...

  2. 字符串与模式匹配算法(一):BF算法

    一.BF算法的基本思想 BF(Brute Force)算法是模式匹配中最简单.最直观的算法.该算法最基本的思想是从主串的第 start 个字符起和模式P(要检索的子串)的第1个字符比较,如果相等,则逐 ...

  3. 用Python去除PDF水印

    今天介绍下用 Python 去除 PDF (图片)的水印.思路很简单,代码也很简洁. 首先来考虑 Python 如何去除图片的水印,然后再将思路复用到 PDF 上面. 这张图片是前几天整理<数据 ...

  4. 字符串压缩 牛客网 程序员面试金典 C++ Python

    字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...

  5. hdu 4786 Fibonacci Tree (最小、最大生成树)

    题意: N个点,M条边.每条边连接两个点u,v,且有一个权值c,c非零即一. 问能否将N个点形成一个生成树,并且这棵树的边权值和是一个fibonacii数. (fibonacii数=1,2,3,5,8 ...

  6. TDengine在浙商银行微服务监控中的实践

    作者:楼永红 王轩宇|浙商银行    浙商银行股份有限公司(简称"浙商银行")是 12 家全国性股份制商业银行之一,总部设在浙江杭州,全国第13家"A+H"上市 ...

  7. prometheus(2)之对kubernetes的监控

    prometheus服务发现 1.基于endpoints的service注释服务自动发现. 2.基于pod注释的服务自动发现 3.基于consul注册的服务自动发现 4.手动配置服务发现 5.push ...

  8. Linux基本命令学习-文件基本操作1

    关机重启 shutdown -h now #立即关机 shutdown -h 5 # 5秒后关机 #重启 shutdown -r now #立即重启 reboot halt #重启 文件相关 系统目录 ...

  9. WPF进阶技巧和实战09-事件(1-路由事件、鼠标键盘输入)

    理解路由事件 当有意义的事情发生时,有对象(WPF的元素)发送的用于通知代码的消息,就是事件的核心思想.WPF通过事件路由的概念增强了.NET事件模型.事件由允许源自某个元素的事件由另一个元素引发.例 ...

  10. redis数据存储的细节

    redis是一个K-V NoSql非关系型数据库,redis有物种数据类型,分别是String,Hash,list,set,zset:这五种类型都是针对K-V中的V设计的. 1.总体介绍:关于redi ...