【LeetCode:3011. 判断一个数组是否可以变为有序 + 分组循环】

判定给定数组是否已排序 写一个通用方法,用于判定给定数组是否已排好序,其中给定升序、等序和降序数组的判定方法和源代码。 立即下载

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,优快云-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🚩 题目链接

⛲ 题目描述

给你一个下标从 0 开始且全是 正 整数的数组 nums 。

一次 操作 中,如果两个 相邻 元素在二进制下数位为 1 的数目 相同 ,那么你可以将这两个元素交换。你可以执行这个操作 任意次 (也可以 0 次)。

如果你可以使数组变有序,请你返回 true ,否则返回 false 。

示例 1:

输入:nums = [8,4,2,30,15]
输出:true
解释:我们先观察每个元素的二进制表示。 2 ,4 和 8 分别都只有一个数位为 1 ,分别为 “10” ,“100” 和 “1000” 。15 和 30 分别有 4 个数位为 1 :“1111” 和 “11110” 。
我们可以通过 4 个操作使数组有序:

  • 交换 nums[0] 和 nums[1] 。8 和 4 分别只有 1 个数位为 1 。数组变为 [4,8,2,30,15] 。
  • 交换 nums[1] 和 nums[2] 。8 和 2 分别只有 1 个数位为 1 。数组变为 [4,2,8,30,15] 。
  • 交换 nums[0] 和 nums[1] 。4 和 2 分别只有 1 个数位为 1 。数组变为 [2,4,8,30,15] 。
  • 交换 nums[3] 和 nums[4] 。30 和 15 分别有 4 个数位为 1 ,数组变为 [2,4,8,15,30] 。
    数组变成有序的,所以我们返回 true 。
    注意我们还可以通过其他的操作序列使数组变得有序。
    示例 2:

输入:nums = [1,2,3,4,5]
输出:true
解释:数组已经是有序的,所以我们返回 true 。
示例 3:

输入:nums = [3,16,8,4,2]
输出:false
解释:无法通过操作使数组变为有序。

提示:

1 <= nums.length <= 100
1 <= nums[i] <= 28

🌟 求解思路&实现代码&运行结果


⚡ 模拟 + 分组循环

🥦 求解思路
  1. 分组遍历统计1的个数,如果1的个数相等,此时判断元素是否大于之前最大的元素,如果小于,说明无法通过更换相邻元素的位置得到有序的数组,直接返回false,否则,更新当前组中的最大元素,继续向后遍历。
  2. 一个组循环结束后,更新前面最大的元素。
  3. 循环结束,没有返回false,说明可以更换,直接返回true即可。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下的解法。
🥦 实现代码
class Solution {
    public boolean canSortArray(int[] nums) {
        int n = nums.length;
        int ans = 0;
        int i = 0;
        while (i < n) {
            int max = 0;
            int cnt = Integer.bitCount(nums[i]);
            while (i < n && Integer.bitCount(nums[i]) == cnt) {
                if (nums[i] < ans) {
                    return false;
                }
                max = Math.max(max, nums[i++]);
            }
            ans = max;
        }
        return true;
    }
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

【头歌educoder】离散数学实训参考-第二章-关系-part1-关系基础 python实现离散数学-关系基础-二元关系 阅读详情

相关推荐

EPICS电机支持(asynMotor)

EPICS电机支持(asynMotor)

yuyuyuliang00的博客 915

判断一个数组是否有序

        一般来说,判断一个数组或序列是正序,倒序还是乱序,需要我们将这个数组完整的遍历一遍后才能得出答案,它不像折半查找那样只处理少量的数据便能得出结论,因为一段包含成千上万个元素的有序序列,哪怕将其中两个元素的位置调换都能将这个序列变成乱序序列.如下面这段序列,只是数字8和9调换,就变成了乱序的. [0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10, 11, 12, ...

ZK教皇的博客 2万+

Geant4学习——入门(基本概念、Geant4工具包的结构、强制类、可选类)

Geant4是由欧洲核子研究组织基于C++面向对象技术开发的蒙特卡罗应用软件包,用于模拟粒子在物质中输运的物理过程。由于具有良好的通用性和扩展能力,Geant4在涉及微观粒子与物质相互作用的诸多领域获得了广泛应用。 第一部分 Geant4的基本概念 HEP中的模拟是“虚拟现实”。仿真既可用于在研发阶段帮助设计探测器,又可用于物理研究中了解探测器的响应。为了创建这样的虚拟现实,我们需要对粒子间的相互作用,几何形状和材料进行建模,以便将基本粒子传播到检测器中。我们还需要描述检测器生成原始数据的灵敏度。 Gea

M_M-铭的博客 2万+

pagehelper circular references

pagehelper circular references

weixin_45641119的博客 1008

【技术解析】AlexNet——从ReLU到Dropout的深度学习关键突破

本文深入解析AlexNet在深度学习领域的关键突破,重点探讨了ReLU激活函数和Dropout技术的革命性应用。作为卷积神经网络的里程碑,AlexNet通过ReLU解决梯度消失问题,利用Dropout有效防止过拟合,为现代深度学习模型奠定了重要基础。这些创新技术至今仍在计算机视觉和自然语言处理等领域发挥重要作用。

weixin_33719619的博客 272

RV1126 ISP开发实战:从Tuner调试到IQ文件解析

本文详细介绍了RV1126 ISP开发的完整流程,从Tuner调试到IQ文件解析,涵盖了环境搭建、工具使用、参数配置及性能优化等关键环节。通过实战案例和避坑指南,帮助开发者快速掌握Rockchip芯片的ISP开发技巧,提升图像处理质量。

weixin_29195615的博客 571

C语言每日一练——有序序列判断

思路其实和解法一相同,只是用了一个小技巧,即输入数据的同时就比较,这样后面就不需要遍历数组了,只是在输入的时候,只有输入两个数据之后才能比较,所以需判断一下,所以下标也需要有相应的改变,这里大家可画图分析。现在很多编译器不支持变长数组(牛客网支持),比如小编用的vs2022,也不支持,所以此时可以根据题意创建数组,如题n的最大值为50,所以就创建有50个元素的整形数组。若为降序,则flag2置1;所以我们只需遍历一次数组,然后判断有几种情况,如果只有其中一种则为有序,若既有升序又有降序则为无序。

hffh123的博客 713

【回归预测】GRNN广义回归神经网络-MATLAB

广义回归神经网络(GRNN)是一种基于径向基函数(RBF)的神经网络模型,主要用于非线性回归任务。与传统的回归分析方法相比,GRNN具有更强的非线性映射能力和学习速度,能够快速逼近复杂的非线性关系。输入层、模式层、求和层和输出层。输入层接收输入数据,模式层通过径向基函数将输入映射到高维空间,求和层对模式层的输出进行加权求和,最后输出层生成预测结果。GRNN的核心思想是利用高斯核函数计算输入与训练样本之间的相似度,然后根据相似度加权平均得到预测值。

2303_77200324的博客 1091

力扣双周赛-- 判断一个数组是否可以变为有序

2 ,4 和 8 分别都只有一个数位为 1 ,分别为 "10" ,"100" 和 "1000"。15 和 30 分别有 4 个数位为 1 :"1111" 和 "11110"。30 和 15 分别有 4 个数位为 1 ,数组变为 [2,4,8,15,30]。- 交换 nums[0] 和 nums[1]。数组变为 [4,8,2,30,15]。- 交换 nums[1] 和 nums[2]。数组变为 [4,2,8,30,15]。数组变为 [2,4,8,30,15]。,那么你可以将这两个元素交换。

无聊人的博客 526

硬件描述语言Verilog学习(一)

主要学习综合和仿真、模块结构和信号类型Verilog 是用代码的形式描述硬件的功能,最终在硬件电路上实现该功能。在 Verilog 描述出硬件功能后需要使用综合器对 Verilog 代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路,也被称为网表。这种将 Verilog 代码转成网表的工具就是综合器。 上图左上角是一段 Verilog 代码,该代码实现了一个加法器的功能。在经过综合器解释后该代码被转化成一个加法器电路。QUARTUS、ISE 和 VIVADO 等 FPGA 开发工具都是综合器,

安静到无声 1499

把冷门数据从内存里请出去:ABAP 环境下玩转 SAP HANA Native Storage Extension (NSE) 的开发者实战笔记

摘要:SAP HANA NSE技术为ABAP系统提供了一种经济高效的温数据管理方案。文章首先指出企业数据存在"温度分层"现象,高频访问的热数据需常驻内存,而低频温数据更适合存储在磁盘或闪存。NSE通过混合列存架构,将不常访问的数据移至磁盘但仍保持数据库内统一管理,显著降低内存成本。 关键实施要点包括:在ADT技术设置中将Load Unit设为"Page Enforced"以启用NSE;理解buffer cache作为数据"抽屉"的工作原理;掌握选表

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 162

【大数据算法】时间亚线性算法之:数组有序的判定算法。

时间亚线性算法:数组有序的判定算法

商务合作 | 面试培训 | 职场规划 ==>主页扫码 1436

uniapp [安卓苹果App端] - 详细实现PDF预览功能在线预览PDF文档,Uniapp App端实现pdf文件预览在线预览pdf二进制文件流、本地pdf文档、PDF文件地址url路径(解决白屏

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,uniapp在线预览pdf功能,在安卓苹果app平台实现PDF的预览查看,uniappApp端实现pdf文件预览,UNIAPP在线预览PDF文档,Uniappapp在线预览pdf文件流,从后端接口里获取pdf文件如何转成链接预览,预览pdf的插件,uni-app的pdf预览功能,uniapp使用pdf.js插件预览pdf文件,预览pdf白屏没有报错,打开后没反应,打开是空白,加载PDF时发生错误,如

🏆 前端领域优质创作者 1万+

LeetCode 3011.判断一个数组是否可以变为有序:分组循环

LeetCode 3011.判断一个数组是否可以变为有序:分组循环 给你一个下标从 0 开始且全是 正 整数的数组 nums 。 一次 操作 中,如果两个 相邻 元素在二进制下数位为 1 的数目 相同 ,那么你可以将这两个元素交换。你可以执行这个操作 任意次 (也可以 0 次)。 如果你可以使数组变有序,请你返回 true ,否则返回 false 。

<font color="Pink">Tisfy的博客</font> 711

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Leetcode3011. 判断一个数组是否可以变为有序

Leetcode3011. 判断一个数组是否可以变为有序

ProgramNovice的博客 788

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

力扣每日一题:3011. 判断一个数组是否可以变为有序

力扣每日一题

yjnlovepy的博客 1126

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Leetcode每日一题 20240713 3011.判断一个数组是否可以变为有序

Leetcode每日一题 20240713

2301_76443687的博客 949

力扣刷题——3011.判断一个数组是否可以变为有序

而相邻的两个数才可以交换,所以我们进行分组循环,找到设置位相同的每一组,然后对当前组进行排序,最后判断整个数组是否有序。2 ,4 和 8 分别都只有一个数位为 1 ,分别为 "10" ,"100" 和 "1000"。它是 GCC 和 Clang 编译器提供的一个内置函数,用于计算一个无符号整数的二进制表示中 1 的个数,也被称为 “汉明重量(Hamming weight)”。30 和 15 分别有 4 个数位为 1 ,数组变为 [2,4,8,15,30]。数组变为 [4,8,2,30,15]。

hxd030228的博客 280

LeetCode刷题笔记第3011题:判断一个数组是否可以变为有序

使用冒泡排序进行排序,在判断大小条件时加入判断二进制下数位为1的数目是否相同,相同则可以进行互换。最后遍历数组,相邻两两之间是否具有升序关系,是则返回true,否则返回false。因为没有使用额外的空间,因此空间复杂度为。,判断是否升序的时间复杂度是。,因此上述代码的时间复杂度为。因为冒泡排序的时间复杂度是。

qq_29787929的博客 514

LeetCode3011. 判断一个数组是否可以变为有序

时间复杂度:O(nlogn),其中 n 为 nums 的长度。空间复杂度:O(1)。忽略排序的栈开销。

zth12212003的博客 361

LeetCode 3011.判断一个数组是否可以变为有序

2 ,4 和 8 分别都只有一个数位为 1 ,分别为 "10" ,"100" 和 "1000"。15 和 30 分别有 4 个数位为 1 :"1111" 和 "11110"。30 和 15 分别有 4 个数位为 1 ,数组变为 [2,4,8,15,30]。- 交换 nums[0] 和 nums[1]。数组变为 [4,8,2,30,15]。- 交换 nums[1] 和 nums[2]。数组变为 [4,2,8,30,15]。数组变为 [2,4,8,30,15]。,那么你可以将这两个元素交换。

tus00000的博客 299

LeetCode 3011. 判断一个数组是否可以变为有序(位运算、排序)

【代码】LeetCode 3011. 判断一个数组是否可以变为有序(位运算、排序)

记录一些刷过的题并分享学习心得 667

【leetcode】3011. 判断一个数组是否可以变为有序

2 ,4 和 8 分别都只有一个数位为 1 ,分别为 "10" ,"100" 和 "1000"。15 和 30 分别有 4 个数位为 1 :"1111" 和 "11110"。30 和 15 分别有 4 个数位为 1 ,数组变为 [2,4,8,15,30]。- 交换 nums[0] 和 nums[1]。数组变为 [4,8,2,30,15]。- 交换 nums[1] 和 nums[2]。数组变为 [4,2,8,30,15]。数组变为 [2,4,8,30,15]。,那么你可以将这两个元素交换。

Wuweinan_190cm的博客 365

分组循环模板和例题

分组循环不能只掌握模板,需要大量的练习,这样才能得心应手!

2401_83880741的博客 813

【算法深练】分组循环:“分”出条理,化繁为简

分组循环算法是一种高效处理数组分组问题的模板方法,适用于需要将数组划分为连续子数组并根据特定条件进行统计的场景。其核心思想是:外层循环负责遍历组之前的准备工作(记录起始位置)和组之后的统计工作(更新结果),内层循环负责遍历当前组并确定组的结束位置。

2401_87944878的博客 2430

力扣3011. 判断一个数组是否可以变为有序(c++实现)

这是自个做的时候写的, 排序最一开始使用的冒泡排序,结果发现冒泡排序无法保证。其实每组没必要排序,经过分析可知,若这一组的值有小于上一组最大值的则不可能有序。:按照题目要求,数组会被分割成若干组,每一组的判断/处理逻辑是相同的。该题我们可以分析出,数组可以通过每个数二进制中1的个数进行分割。以下方法是看了灵神的解析写的(这一条件,就改为了插入排序。方法三:分组循环优化。

zdzdbd的博客 316
上一篇: 【LeetCode:2974. 最小数字游戏 + 模拟 + 排序】
下一篇: 【LeetCode:807. 保持城市天际线 + 模拟】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值