603 字
3 分钟
leetcode 刷题记录1
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 b1957. 删除字符使字符串变好
一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。
给你一个字符串 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 res1695. 删除子数组的最大得分
给你一个正整数数组 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