leetcode 刷题记录1

发布于 9 天前  46 次阅读


66. 加一

给定一个表示 大整数 的整数数组 digits,其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0

将大整数加 1,并返回结果的数字数组。

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        a=""
        b = []
        c= 0
        for i in digits:
            a+=str(i)
        c = int(a) +1
        for i in str(c):
            b.append(int(i))
        
        return b

1957. 删除字符使字符串变好

一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。

给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 。

请你返回删除后的字符串。题目数据保证答案总是 唯一的 

class Solution(object):
    def makeFancyString(self, s):
        """
        :type s: str
        :rtype: str
        """
        res = ""
        for i in range(len(s)):
            if i>1:
                if s[i] == s[i-1] and s[i] == s[i-2]:
                    pass
                else:
                    res +=s[i]
            else:
                res +=s[i]
        return res

1695. 删除子数组的最大得分

给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组删除子数组的 得分 就是子数组各元素之  。

返回 只删除一个 子数组可获得的 最大得分 。

如果数组 b 是数组 a 的一个连续子序列,即如果它等于 a[l],a[l+1],...,a[r] ,那么它就是 a 的一个子数组。

class Solution(object):
    def maximumUniqueSubarray(self, nums):
        current_sum = 0
        max_sum = 0

        seen = set()#初始化一个空集合,记录当前窗口内的元素(用于去重),什么都没有
        left = 0
        for right in range(len(nums)):
            while nums[right] in seen:
                seen.remove(nums[left])
                current_sum -= nums[left]
                left += 1
            seen.add(nums[right])
            current_sum += nums[right]
            max_sum = max(max_sum,current_sum)

        """

        nums:     [4, 2, 4, 5, 6]
        index:     0  1  2  3  4
                    ↑     ↑
                left   right
        seen = {2, 4}
        left 默认为第一个元素,right 从第一个开始遍历
        默认将right 遍历的nums 的元素 添加进set创建的空集合里
        当nums[right] 遍历到一个元素已经存在在set创建的空集合里
        也就是说出现了重复的元素并且这个这个元素与nums[left]重复
        seen.remove(nums[left]) 删除旧的重复的元素
        举例子就是 当nums[right]遍历到nums[2] 时值为4 但是与nums[left]也就是nums[0]重复
        使用seen.remove(nums[left]) 删除掉set创造的集合里的nums[0] 也就是seen[0]
        使得  seen = {4, 2} --> seen = {2, 4}
        然后left++ 继续循环

        """
        return max_sum
最后更新于 2025-07-22