题目描述:
给定一个 无重复元素 的 有序 整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b]
应该按如下格式输出:
"a->b"
,如果a != b
"a"
,如果a == b
例子
分析:
从数组的0位置向右遍历数组,当相邻元素差值大于1,就找到了一个区间,直至遍历完数组
在遍历过程中,维护区间low和high分别记录区间的起点和终点,对任何区间都有low<=high,当得到一个区间时,根据low和high的值生成区间的字符串表示
当low<=high时,区间字符串表示为“low——>high”
当low==high时,区间的字符串表示为“low”
代码:
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
n = len(nums)
res = []
a, b = 0, 0
while b < n:
if b < n - 1 and nums[b + 1] == nums[b] + 1:
b += 1
else:
res.append( (nums[a], nums[b]) )
a = b + 1
b = b + 1
def p(x):
a, b = x
if a == b:
return str(a)
else:
return str(a) + '->' + str(b)
return list(map(p, res ))
题目描述:
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。
分析:
先判断出1和2属于True
给定一个初值2,让其一直乘2,如果大于n,就返回false,否则返回Ture
代码:
class Solution(object):
def isPowerOfTwo(self, n):
"""
:type n: int
:rtype: bool
"""
if n==1 or n==2:
return True
i=2
while i<=n:
if i==n:
return True
i = i*2
return False