力扣-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判断产生多少次递减来做:
  4. 如果产生两次递减,返回False
  5. 如果没有产生递减,返回True
  6. 如果产生一次递减,若数组最后一位数大于数组第一位数则返回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日
许可协议