Leetcode刷题笔记

163.缺失的区间
给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间。

示例:
输入: nums = [0, 1, 3, 50, 75], lower = 0 和 upper = 99,
输出: [“2”, “4->49”, “51->74”, “76->99”]

def findMissingRanges(nums,lower,upper):
    low = lower-1
    nums.append(upper+1)
    res = []

    for num in nums:
        diff = num - low
        if diff == 2:    #nums[i]-nums[i]==2时,说明中间只跨了一个数,所以把这个数字单独作为一个区间
            res.append(str(num-1))
        elif diff>2: #low+1是数组中没有的数,num-1也是数组中没有的数
            res.append(str(low+1)+"->"+str(num-1))
        low = num #low等于上一个num
    return res

nums = [0,1,3,50,75]
lower = 0
upper = 75
res = findMissingRanges(nums,lower,upper)
print(res)

(1)定义的指针
定义了两个指针,low和num。num指向数组中的元素,low指向num前一个所指的元素。
(2)边界条件
当num为数组中的第一个元素时,low为区间下界(lower)-1。
num的最后一个元素为区间上界(upper)+1。
(3)分情况分析
如果当前元素(i)减上一元素(i-1)的差值为2,说明两个元素之间只差1个数,就将这个数以字符串的形式(str(num-1))添加到res中
如果当前元素(i)减上一元素(i-1)的差值大于2,所添加的区间范围为low+1~num-1。(因为low和num都是数组中所包含的数字)
(4)下一步
low的下一个为当前的num,num的下一个为数组中的下一个元素。

本题做法源自:https://blog.csdn.net/qq_28468707/article/details/103587672

31.下一个排列
实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

思路:
(1)从后往前找出第一个降序排列的数字i
(2)从后往前找出第一个大于i的数字,并交换它们的位置
(3)此时i之后的数字为降序(该情况下的最大值),将其调整为升序即可。
(4)若当前排列已经是最大值,则将该排列全部改为升序,囊括在了第三种情况。

    def nextPermutation(nums):
        i = len(nums)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值