今日补题 + 刷题(为了leetcode的时间复杂度分析怒冲365)(leetcode篇)

leetcode3115(每日一题)

3115. 质数的最大距离 - 力扣(LeetCode)

时间复杂度O(n)

空间复杂度O(1)

先把1-100中的质数选出来,然后双指针i,j左右指针寻找mi,ma也就是最大索引和最小索引,最后返回最大减最小。

class Solution:
    def maximumPrimeDifference(self, nums: List[int]) -> int:
        sushu = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
        sushu = set(sushu)
        i,j = 0,len(nums) - 1
        mi = ma = -1
        while i <= j:
            if nums[i] in sushu:
                mi = i
            else:
                i += 1
            if nums[j] in sushu:
                ma = j
            else:
                j -= 1
            if mi != -1 and ma != -1:
                break
        return ma - mi

leetcode3196(周赛403)

3196. 最大化子数组的总成本 - 力扣(LeetCode)

该题需要知道最后的结果只有两种可能,要么是+要么是+-,所以我们就找这两个的最大值,每次向后都要找到这个位置的最大值。

时间复杂度:O(N)

空间复杂度:O(N)

class Solution:
    def maximumTotalCost(self, nums: List[int]) -> int:
        n = len(nums)
        f = [0] * (n + 1)
        f[1] = nums[0]
        for i in range(1, n):
            f[i + 1] = max(f[i] + nums[i], f[i - 1] + nums[i - 1] - nums[i])
        return f[n]

leetcode163(会员题)

163. 缺失的区间 - 力扣(LeetCode)

要做这道题

时间复杂度:O(nlogn)

空间复杂度:O(n)

class Solution:
    def findMissingRanges(self, nums: [int], lower: int, upper: int) -> [str]:
        ans = []
        nums.append(lower - 1)
        nums.append(upper + 1)
        nums = list(set(nums))
        nums.sort()
        for i in range(1,len(nums)):
            if nums[i] - nums[i - 1] > 1:
                ans.append([nums[i - 1] + 1,nums[i] - 1])
        return ans

先把两个边界加到数组里面,但是我们要注意,边界也是可以取的所以lower-1,upper+1,然后再把重复的数删除一下,然后再进行排序,然后从第1个索引开始遍历,把遍历的结果加到ans里面,返回ans。

  • 50
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值