leecode.1752. 检查数组是否经排序和轮转得到
发布日期:2021-06-20 02:50:09 浏览次数:5 分类:技术文章

本文共 767 字,大约阅读时间需要 2 分钟。

题目

给你一个数组 nums 。nums 的源数组中,所有元素与 nums 相同,但按非递减顺序排列。

如果 nums 能够由源数组轮转若干位置(包括 0 个位置)得到,则返回 true ;否则,返回 false 。

源数组中可能存在 重复项 。

注意:我们称数组 A 在轮转 x 个位置后得到长度相同的数组 B ,当它们满足 A[i] == B[(i+x) % A.length] ,其中 % 为取余运算。

示例一

输入:nums = [3,4,5,1,2]

输出:true
解释:[1,2,3,4,5] 为有序的源数组。
可以轮转 x = 3 个位置,使新数组从值为 3 的元素开始:[3,4,5,1,2] 。

思路分析

因为原数组是有序的,所以我们根据顺序的分界点可以找出来平移的位置,从而进行对比。

代码

class Solution {
public: bool check(vector
& nums) {
vector
origin = nums; sort(origin.begin(), origin.end()); int n = nums.size(), x = 1; if(nums == origin) return true; while(x < n && nums[x - 1] <= nums[x]) x++; for(int i = 0;i < n;i++){
if(nums[(i + x) % n] != origin[i]) return false; } return true; }};

转载地址:https://blog.csdn.net/free1993/article/details/114291682 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:leecode.1753. 移除石子的最大得分
下一篇:leecode.1761. 一个图中连通三元组的最小度数

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月09日 21时53分05秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章