• 代码随想录二刷第二天(Python)


    27. 移除元素

    题目链接:https://leetcode.cn/problems/remove-element/

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

    示例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。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

    题解:

    lass Solution:
        def removeElement(self, nums: List[int], val: int) -> int:
            fast,slow = 0,0
            size = len(nums)
            while fast < size:
                if nums[fast] != val:
                    nums[slow] = nums[fast]
                    slow += 1
                fast += 1
            return slow
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    总结:此题可以通过暴力解法解出,通过两层循环,一层遍历数组,一层更新数组。另一种解法就是定义快慢指针,快指针遍历数组,如果不是目标值就将该值传给慢指针,然后++,如果是目标值就快指针加1,慢指针不变。

    26. 删除有序数组中的重复项

    题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/

    题目描述:给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k 。

    示例1:输入:nums = [1,1,2]
    输出:2, nums = [1,2,_]
    解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。

    示例2:输入:nums = [0,0,1,1,1,2,2,3,3,4]
    输出:5, nums = [0,1,2,3,4]
    解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

    题解:

    class Solution:
        def removeDuplicates(self, nums: List[int]) -> int:
            fast,slow = 1,1
            size = len(nums)
            if size ==0:
                return 0
            while fast < size:
                if nums[fast] != nums[fast - 1]:
                    nums[slow] = nums[fast]
                    slow += 1
                fast += 1
            return slow
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    总结:此题同样可以采用快慢指针法,处理一下快指针指向的值与前一个值是否相等,不相等则将快指针指向的值赋给慢指针。

    283. 移动零

    题目链接:https://leetcode.cn/problems/move-zeroes/

    题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。

    示例1:输入: nums = [0,1,0,3,12]
    输出: [1,3,12,0,0]

    示例2:输入: nums = [0]
    输出: [0]

    题解:

    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            fast,slow = 0,0
            size = len(nums)
            while fast < size:
                if nums[fast] != 0:
                    temp = nums[slow]
                    nums[slow] = nums[fast]
                    nums[fast] = temp
                    slow +=1
                fast += 1
            return nums
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    总结:此题采用双指针解法,当快指针指向的不是0,将慢指针暂存,快指针赋给慢指针,暂存的值赋给快指针,遍历数组

    844. 比较含退格的字符串

    题目链接:https://leetcode.cn/problems/backspace-string-compare/

    题目描述:给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。

    示例1:输入:s = “ab#c”, t = “ad#c”
    输出:true
    解释:s 和 t 都会变成 “ac”。

    示例2:输入:s = “ab##”, t = “c#d#”
    输出:true
    解释:s 和 t 都会变成 “”。

    题解:

    class Solution:
        def backspaceCompare(self, s: str, t: str) -> bool:
            def f(s):
                while '#' in s:
                    i = s.index('#')
                    s = s[:max(i - 1, 0)] + s[i + 1:]
                return s
            return f(s) == f(t)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    SpringMVC 11 Ajax验证用户名体验和拦截器
    接口自动化测试用例如何设计
    基于Android的手机导航系统设计与实现
    Linux篇12文件系统inode和软硬链接
    gma 2 教程(二)数据操作:8.矢量数据功能逻辑架构和格式支持
    WPF实现签名拍照功能
    一行代码让你的项目轻松使用Dapr
    asp.netWebForm(.netFramework) CSRF漏洞
    解析后人类时代类人机器人的优越性
    第70章 单元测试的定义实现
  • 原文地址:https://blog.csdn.net/qq_51588716/article/details/132766023