代码随想录二刷第二天(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。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

题解:

python 复制代码
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,慢指针不变。

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 。不需要考虑数组中超出新长度后面的元素。

题解:

python 复制代码
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

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

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]

题解:

python 复制代码
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

总结:此题采用双指针解法,当快指针指向的不是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 都会变成 ""。

题解:

python 复制代码
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)
相关推荐
张子夜 iiii1 分钟前
机器学习算法系列专栏:主成分分析(PCA)降维算法(初学者)
人工智能·python·算法·机器学习
ZLRRLZ10 分钟前
【C++】C++11
开发语言·c++
一匹电信狗13 分钟前
【C++】异常详解(万字解读)
服务器·c++·算法·leetcode·小程序·stl·visual studio
全栈软件开发20 分钟前
PHP域名授权系统网站源码_授权管理工单系统_精美UI_附教程
开发语言·ui·php·php域名授权·授权系统网站源码
誰能久伴不乏25 分钟前
Qt 动态属性(Dynamic Property)详解
开发语言·qt
sp4242 分钟前
白话 LRU 缓存及链表的数据结构讲解(二)
算法
枫叶丹41 小时前
【Qt开发】常用控件(四)
开发语言·qt
PineappleCoder1 小时前
为什么说发布 - 订阅是代码的 “万能胶水”?解耦逻辑全解析
前端·javascript·算法
草莓熊Lotso1 小时前
《吃透 C++ 类和对象(中):const 成员函数与取地址运算符重载解析》
c语言·开发语言·c++·笔记·其他
墨染点香1 小时前
LeetCode 刷题【43. 字符串相乘】
算法·leetcode·职场和发展