# 连续性
# 把题目思路简化也就是,判断单调递增是否连续,且断点有几个?
# 所以首先找到断点,然后判断子区间首个元素值是否等于总长度即可。
class Solution:
def check(self, nums: List[int]) -> bool:
ans, n = 0, len(nums)
for i in range(1, n):
if nums[i] < nums[i - 1]:
ans = i
break
if ans == 0:
return True
for i in range(ans + 1, n):
if nums[i] < nums[i - 1]:
return False
return nums[0] >= nums[-1]
方法二:if大法
思路:出现两次以上递减直接返回 False,出现仅一次时,对首尾元素值判断即可。
# if大法
# 出现两次以上递减直接返回 False,出现仅一次时,对首尾元素值判断即可。
class Solution:
def check(self, nums: List[int]) -> bool:
ans = False
for i in range(len(nums) - 1):
if nums[i] > nums[i + 1]:
if not ans:
ans = True
else:
return False
return not ans or ans and nums[-1] <= nums[0]
方法三:一刀流
思路:思路基本上一致,代码比较秀
# 一刀流
# 思路基本上一致,代码比较秀
class Solution:
def check(self, nums: List[int]) -> bool:
return sum(v > nums[(i + 1) % len(nums)] for i, v in enumerate(nums)) <= 1