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