移除元素(双指针) Python 力扣

这篇具有很好参考价值的文章主要介绍了移除元素(双指针) Python 力扣。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

题目描述

代码展示

知识点分析


题目描述

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

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

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

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}
 

示例 1:

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

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
 

提示:

0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100
通过次数1,068,226提交次数1,804,784

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

代码展示

# ```python
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        i = 0
        for j in range(len(nums)):
            if nums[j] != val:
                nums[i] = nums[j]
                i += 1
        return i

知识点分析

这是一个移除数组中指定元素的算法,时间复杂度为O(n),空间复杂度为O(1)。

时间复杂度的概念是指算法执行所需要的时间,通常用操作次数来衡量。在这个算法中,我们使用了一个for循环遍历整个数组,因此时间复杂度为O(n)。

空间复杂度的概念是指算法执行所需要的额外空间,通常用空间大小来衡量。在这个算法中,我们只使用了常数个额外变量i和j,因此空间复杂度为O(1)。

常数个额外变量的概念是指算法执行所需要的额外变量数量是固定的,与输入规模无关。在这个算法中,我们只使用了i和j两个变量,它们的数量不随输入规模而变化,因此是常数个额外变量。

空间复杂度是算法所需的额外空间与输入规模之间的关系。在这个算法中,我们只使用了一个额外变量i来记录新数组的长度,因此空间复杂度为O(1)。这意味着无论输入规模如何增加,算法所需的额外空间都是固定的。 除了常数个额外变量之外,算法还可以使用额外的数据结构来存储数据,例如使用一个新的数组来存储移除指定元素后的结果。这种情况下,空间复杂度将取决于新数组的长度,即为O(n)。文章来源地址https://www.toymoban.com/news/detail-472226.html

到了这里,关于移除元素(双指针) Python 力扣的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【leetcode 力扣刷题】移除链表元素 多种解法

    题目链接:203.移除链表元素 题目内容: 理解题意:就是单纯的删除链表中所有值等于给定的val的节点。上一篇博客中介绍了链表的基础操作,在删除链表中节点时,需要注意的是头节点: 如果没有虚拟头节点,那么对头节点的删除需要做不同的处理,head = head-next; 如果有

    2024年02月12日
    浏览(47)
  • 【C/C++练习】经典的快慢指针问题---移除元素

    题目出处 :移除元素  对于本题我将按照由易到难的顺序为大家分享三种解题思路,并逐一分析它们的优劣,以及注意事项。  我想暴力求解应该是第一次接触到此题的小伙伴们最先想出来的办法吧。这道题目暴力求解就是去遍历数组,当遇到数组元素等于 val 的时候,将

    2024年02月11日
    浏览(87)
  • 算法:移除数组中的val的所有元素---双指针[2]

    文章来源: https://blog.csdn.net/weixin_45630258/article/details/132689237 欢迎各位大佬指点、三连 1、题目: 给你一个数组 nums和一个值 val,你需要 原地移除 所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地修改 输入

    2024年02月09日
    浏览(44)
  • 【LeetCode题目详解】 203. 移除链表元素707. 设计链表206. 反转链表 day3(补)

    题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:head = [], val = 1 输出:[] 示例 3: 输入:head = [7,7,7,7], val = 7 输出:[] 看到这道题就想到了链表 这道题有两种写法,涉及如下链表操作的两种方式: 直接使用

    2024年02月16日
    浏览(41)
  • 算法刷题营【Day1】:: 27. 移除元素:快慢指针在顺序表中的应用与相关刷题

    本内容是笔者结合《代码随想录》总结所得,记录学习过程,分享知识! 目录: 1. 开篇例题:27. 移除元素 2. 题解参考 3. 题解思路 4. 相关题 [ - - 4.1 26. 删除有序数组中的重复项 ] [ - - 4.1 283. 移动零 ] 5. 相关题题解及简要思路 - - 5.1 26. 删除有序数组中的重复项 - - 5.1 283. 移动

    2024年02月06日
    浏览(93)
  • 「双指针」删除排序链表中的重复元素 II(力扣第82题)

    本题为1月15日力扣每日一题 题目来源:力扣第82题 题目tag: 链表 双指针 给定一个已排序的链表的头head,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。 示例 1 输入: 输出: 示例 2 输入: 输出: 链表中节点数目在范围$ [0,300] $内 $ -100 leq Nod

    2024年02月01日
    浏览(48)
  • 代码随想录复习 203 移除链表元素

    代码如下  /**  * Definition for singly-linked list.  * type ListNode struct {  *     Val int  *     Next *ListNode  * }  */ func removeElements(head *ListNode, val int) *ListNode {              prehead := ListNode{}   //设置一个虚拟头结点                        prehead.Next 

    2024年02月03日
    浏览(50)
  • 【代码随想录-Leetcode第二题:27.移除元素】

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的 样例:示例 1: 解释:函数

    2024年02月14日
    浏览(50)
  • 代码随想录 第三天||203.移除链表元素

    链表与数组不同,链表是映像存储,不像数组那样连续存址,所以对于链表删除节点应该按照下面的图示进行: 代码如下:    

    2024年02月12日
    浏览(45)
  • 代码随想录-链表1( 203.移除链表元素、)

    203. 移除链表元素 707. 设计链表 206. 反转链表         自己写的是从后往前去反转,没想到可以从前往后反转的方法,以为地址不连续并且无法根据索引找地址就没办法做,看了双指针方法后才发现如何从前往后反转,其实只要记录每个结点的地址就可以了,还是对链表的

    2024年02月19日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包