题目:
给定一个无重复元素的有序整数数组nums。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说,nums的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于nums的数字X。列表中的每个区间范围[a,b]应该按如下格式输出:
- "a->b",如果a != b
- "a",如果a == b
示例 :
输入 | 输出 | 解释 |
---|---|---|
nums = [0,1,2,4,5,7] | ["0->2","4->5","7"] | 区间范围是: [0,2] --> "0->2" [4,5] --> "4->5" [7,7] --> "7" |
提示:
- 0<=nums.length<=20
- nums按升序排列
- nums中的所有值都互不相同
相关标签:数组
题解:
我们从数组的位置0出发,向右遍历。每次遇到相邻元素之间的差值等于1时,记录数据至临时列表,当差值不等于1时,我们就找到了一个区间。遍历完数组之后,就能得到一系列的区间的列表。[['0'], ['2', '3', '4'], ['6'], ['8', '9']]
之后在遍历大列表,修改输出效果:['0', '2->4', '6', '8->9']
代码:Python
nums = [0, 2, 3, 4, 6, 8, 9]
def leetcode():
if nums == []:
return nums
res, ans, j = list(), list(), nums[0]
for i in nums:
if i == j:
ans.append(str(i))
else:
res.append(ans)
ans = [str(i)]
j = i + 1
res.append(ans)
print(res) # [['0'], ['2', '3', '4'], ['6'], ['8', '9']]
for i in range(len(res)):
if res[i][0] == res[i][-1]:
res[i] = res[i][0]
else:
res[i] = res[i][0] + '->' + res[i][-1]
return res
if __name__ == '__main__':
res = leetcode()
print(res) # ['0', '2->4', '6', '8->9']
总结:
题目内容来源于leetcode链接:汇总区间