​力扣解法汇总769.最多能完成排序的块

news/2024/7/7 20:18:31

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。

我们将 arr 分割成若干  (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后的原数组相同。

返回数组能分成的最多块数量。

示例 1:

输入: arr = [4,3,2,1,0]
输出: 1
解释:
将数组分成2块或者更多块,都无法得到所需的结果。
例如,分成 [4, 3], [2, 1, 0] 的结果是 [3, 4, 0, 1, 2],这不是有序的数组。

示例 2:

输入: arr = [1,0,2,3,4]
输出: 4
解释:
我们可以把它分成两块,例如 [1, 0], [2, 3, 4]。
然而,分成 [1, 0], [2], [3], [4] 可以得到最多的块数。

提示:

  • n == arr.length
  • 1 <= n <= 10
  • 0 <= arr[i] < n
  • arr 中每个元素都 不同

解题思路:

* 解题思路:
* 这题的核心就是看分区内的数字,是否在对应的位置。假设分区内是2,3,4(顺序无所谓),则在对应的aar数组中,这三个数字一定要在2到4位才可以。
* 所以,这里我们可以用use数组来记录对应的数字是否出现过,因为这题保证元素唯一。
* 然后遍历arr数组,如果读出来的数字是2,则遍历数组中当前位到第2位的位置,其中如果读到了更大的数,则动态更改到最大的数。Math.max(value, value2);,同时使用use来记录是否出现过。
* 遍历完成后,判断use是否全出现过,如果全出现,则说明这个分区是OK的。
 

代码:

public class Solution769 {

    public int maxChunksToSorted(int[] arr) {
        boolean[] use = new boolean[arr.length];
        int result = 0;
        int index = 0;
        while (index < arr.length) {
            int value = arr[index];
            for (int i = index; i <= value; i++) {
                int value2 = arr[i];
                value = Math.max(value, value2);
                use[i] = true;
            }
            boolean flag = true;
            for (int i = index; i <= value; i++) {
                flag &= use[i];
            }
            if (!flag) {
                return 1;
            }
            result++;
            index = value + 1;
        }
        return result;
    }
}


http://lihuaxi.xjx100.cn/news/81568.html

相关文章

【Research】疾病检测中的语音生物标识研究

疾病检测中的语音生物标识研究 疾病检测中的语音生物标识研究一、 研究概述二、 研究内容三、 研究方法3.1 深度学习模型3.2 多模态语音识别3.3语音生物标记检测四、 总结五、 参考文献疾病检测中的语音生物标识研究 概要:尽管语音识别技术随着以深度学习为代表的人工智能的发…

2023泰晤士高等教育世界大学排名发布(附TOP200榜单)

继2023年QS世界大学排名和2022软科世界大学学术排名发布之后&#xff0c;四大排名中又一榜单新鲜出炉。知识人网小编整理了TOP前200的榜单&#xff0c;供访问学者和博士后及联合培养博士申请者参考。 北京时间2022年10月12日&#xff0c;世界四大权威大学排名之一的泰晤士高等教…

(附源码)计算机毕业设计SSM基于JAVA的新生报到管理系统

&#xff08;附源码&#xff09;计算机毕业设计SSM基于JAVA的新生报到管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

Linux入门基本命令的使用。

1.切换XWindow和Terminal。 一般默认的XWindow是tty1&#xff0c;tty2~tty6是Terminal。 使用快捷键&#xff08;altctrlf1~f6&#xff09;进行切换。如果没有启动XWindow&#xff0c;使用命令&#xff08;startx&#xff09;来启动XWindow。如图&#xff1a; 如果已经启动了…

R语言使用ggplot2包可视化时间序列折线图、同时可视化多个时间序列的折线图

R语言使用ggplot2包可视化时间序列折线图、同时可视化多个时间序列的折线图 目录

hook之useCallback

useCallback的作用 在函数组件中&#xff0c;在函数体内我们常常定义一些内嵌的函数。这些函数有一个特性就是在组件每次渲染的时候会被重新定义&#xff0c;这会造成一些性能问题。 React提出useCallback来记住当前定义的函数&#xff0c;并在下次组件渲染的时候返回之前定义…

XCIE-HUAWEI-路由控制-filter-policy-ACL

XCIE-HUAWEI-路由控制-filter-policy-ACL 这个讲白了就是做路由控制,维护,运维,优化 毕竟,很少有机会可以从无到有去建设一个网络,当然了,这个技术点,考证也好,工作也好,都很常用. 比如这条路由我不想让他用 或者我不想收到,过滤掉 咋整? 人家宣告了我得接收呀控制流量可达性…

SQL排序与分页

排序 按照salary从高到低的顺序显示员工信息 使用order by 对查询到的数据进行排序 默认升序 select employee_id,last_name,salary from employees order by salary; 降序排列 select employee_id,last_name,salary from employees order by salary DESC; 我们也可以使用列…