力扣-1752. 检查数组是否经排序和轮转得到

本文最后更新于:2022年11月27日 下午

题目描述

1752

思路及实现

题目的意思其实就是给你一个数组,然后如果这个数组不是完全单调递增的话,找到不能够单调递增的地方,然后从这个地方开始一直到最后的部分搬到最前边去,判断这样新产生的数组是否是单调递增的。
所以思路也十分简单:

  1. 找到需要进行分割的位置
  2. 对数组进行重组
  3. 将重组数组与排序后的数组进行比较
    根据这个思路可以写出如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
class 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判断产生多少次递减来做:

  1. 如果产生两次递减,返回False
  2. 如果没有产生递减,返回True
  3. 如果产生一次递减,若数组最后一位数大于数组第一位数则返回False,否则True
1
2
3
4
5
6
7
8
9
10
11
12
class 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/
作者
MaP1e-G
发布于
2022年11月27日
许可协议