2024.3.27力扣每日一题——统计将重叠区间合并成组的方案数

2024-04-07 16:52

本文主要是介绍2024.3.27力扣每日一题——统计将重叠区间合并成组的方案数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2024.3.27

      • 题目来源
      • 我的题解
        • 方法一 排序+合并区间+快速幂
        • 方法二 官方区间合并

题目来源

力扣每日一题;题序:2580

我的题解

方法一 排序+合并区间+快速幂

先将ranges按第一个元素升序,再按第二个元素升序。然后采用合并区间的方式进行区间合并,每次有区间合并n都减1,最后计算 2 n 2^n 2n%1000000007就可以得到最终的答案。但是由于n可能很大,所以直接计算 2 n 2^n 2n会出现long类型溢出,所以需要再计算过程中一直mod,即如fastPow函数。

时间复杂度:O(nlogn)。主要是排序消耗的时间
空间复杂度:O(logn)。排序所用的栈空间为 O(log⁡n)。

public  int countWays(int[][] ranges) {Arrays.sort(ranges,(a,b)->{if(a[0]==b[0])return a[1]-b[1];elsereturn a[0]-b[0];});int n=ranges.length;int mod=1000000007;int sz=n;int min=ranges[0][0];int max=ranges[0][1];for(int i=1;i<sz;i++){int[] t=ranges[i];if((t[0]>=min&&t[0]<=max)||(t[1]>=min&&t[1]<=max)){n--;min=Math.min(min,t[0]);max= Math.max(max,t[1]);}else{min=t[0];max=t[1];}}long res=fastPow(2,n,mod);return (int)(res%mod);}public   long fastPow(int x,int n,int mod){long res = 1;while(n>0){if((n&1)==1){res=(res*x)%mod;}x=(int)((long)x*x%mod);n>>=1;}return res;}
方法二 官方区间合并

参考官方题解

时间复杂度:O(nlogn)
空间复杂度:O(logn)

static final int MOD = 1000000007;public int countWays(int[][] ranges) {Arrays.sort(ranges, (a, b) -> a[0] - b[0]);int n = ranges.length;int res = 1;for (int i = 0; i < n; ) {int r = ranges[i][1];int j = i + 1;while (j < n && ranges[j][0] <= r) {r = Math.max(r, ranges[j][1]);j++;}res = res * 2 % MOD;i = j;}return res;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

这篇关于2024.3.27力扣每日一题——统计将重叠区间合并成组的方案数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883151

相关文章

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://