力扣-1752. 检查数组是否经排序和轮转得到
本文最后更新于:2022年11月27日 下午
题目描述
思路及实现
题目的意思其实就是给你一个数组,然后如果这个数组不是完全单调递增的话,找到不能够单调递增的地方,然后从这个地方开始一直到最后的部分搬到最前边去,判断这样新产生的数组是否是单调递增的。
所以思路也十分简单:
- 找到需要进行分割的位置
- 对数组进行重组
- 将重组数组与排序后的数组进行比较
根据这个思路可以写出如下代码:我们还可以利用1
2
3
4
5
6
7
8
9
10
11
12
13class Solution:
def check(self, nums: List[int]) -> bool:
pre_num = 0
div_pos = -1
for i, num in enumerate(nums):
if num < pre_num:
div_pos = i
break
pre_num = num
if div_pos == -1:
return True
else:
return nums[div_pos:] + nums[:div_pos] == sorted(nums)flag
判断产生多少次递减来做: - 如果产生两次递减,返回False
- 如果没有产生递减,返回True
- 如果产生一次递减,若数组最后一位数大于数组第一位数则返回False,否则True
1
2
3
4
5
6
7
8
9
10
11
12class Solution:
def check(self, nums: List[int]) -> bool:
pre_num = 0
flag = False # 检查是否出现递减
for i, num in enumerate(nums):
if num < pre_num:
if flag:
return False
else:
flag = True
pre_num = num
return not flag or flag and nums[0] >= nums[-1]
希望本文章能够帮到您~
力扣-1752. 检查数组是否经排序和轮转得到
https://map1e-g.github.io/2022/11/27/leetcode-1752/