
1752 检查数组是否经排序和轮转得到(分析)
发布日期:2021-05-07 21:57:13
浏览次数:21
分类:精选文章
本文共 991 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要判断给定的数组 nums
是否可以通过轮转若干位置得到一个按非递减顺序排列的源数组。
方法思路
我们可以通过以下步骤来解决这个问题:
问题分析:
- 源数组是一个按非递减顺序排列的数组。
- 我们需要判断
nums
是否可以通过轮转得到这个源数组。
关键观察:
- 如果
nums
数组是一个非递减数组,那么它可以直接作为源数组,返回true
。 - 如果
nums
数组中存在多个降序片段(即多个相邻元素后一个小于前一个),那么它不能通过轮转得到源数组,返回false
。 - 如果
nums
数组中存在一个降序片段,并且最后一个元素小于等于第一个元素,那么它可以通过轮转得到源数组,返回true
。
算法选择:
- 遍历数组,统计降序片段的数量。
- 如果降序片段数量超过1,返回
false
。 - 如果降序片段数量为0,返回
true
。 - 如果降序片段数量为1,并且最后一个元素小于等于第一个元素,返回
true
。
解决代码
from typing import Listclass Solution: def check(self, nums: List[int]) -> bool: count = 0 for i in range(len(nums) - 1): if nums[i] > nums[i + 1]: count += 1 if count > 1: return False return count == 0 or nums[-1] <= nums[0]
代码解释
- 初始化变量:
count
用于统计降序片段的数量。 - 遍历数组:从第一个元素开始,比较每个元素和下一个元素。如果当前元素大于下一个元素,说明存在一个降序片段,
count
增加。 - 检查降序片段数量:如果
count
超过1,立即返回false
。 - 返回结果:如果
count
为0,说明数组是非递减的,返回true
。如果count
为1,并且最后一个元素小于等于第一个元素,返回true
。否则,返回false
。
这个方法通过一次遍历数组,时间复杂度为 O(n),其中 n 是数组的长度,能够高效地解决问题。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月06日 23时21分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
12张图打开JMeter体系结构全局视角
2019-03-06
Spring Boot 2.x基础教程:构建RESTful API与单元测试
2019-03-06
[UWP 自定义控件]了解模板化控件(1):基础知识
2019-03-06
UWP 自定义控件:了解模板化控件 系列文章
2019-03-06
[UWP]从头开始创建并发布一个番茄钟
2019-03-06
在 Azure 上执行一些简单的 python 工作
2019-03-06
WinUI 3 Preview 3 发布了,再一次试试它的性能
2019-03-06
使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
2019-03-06
List数组排序
2019-03-06
VMware vSphere 离线虚拟机安装 BIND 9
2019-03-06
说说第一份工作
2019-03-06
dojo/request模块整体架构解析
2019-03-06
dojo/aspect源码解析
2019-03-06
Web性能优化:What? Why? How?
2019-03-06
Javascript定时器学习笔记
2019-03-06
dojo的发展历史
2019-03-06
Python存储系统(Redis)
2019-03-06
C语言指针收藏
2019-03-06
.net 4种单例模式
2019-03-06
T4 生成数据库实体类
2019-03-06