力扣经典150题第四十七题:汇总区间

server/2024/10/21 11:33:40/

目录

      • 题目描述和要求
      • 示例解释
      • 解题思路
      • 算法实现
      • 复杂度分析
      • 测试和验证
      • 总结和拓展
      • 参考资料

题目描述和要求

给定一个无重复元素的有序整数数组 nums,要求返回恰好覆盖数组中所有数字的最小有序区间范围列表。即,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字。

列表中的每个区间范围 [a,b] 应该按如下格式输出:

  • “a->b”,如果 a != b
  • “a”,如果 a == b

示例解释

示例 1:

输入:nums = [0,1,2,4,5,7]
输出:[“0->2”,“4->5”,“7”]
解释:区间范围是:

  • [0,2] --> “0->2”
  • [4,5] --> “4->5”
  • [7,7] --> “7”

示例 2:

输入:nums = [0,2,3,4,6,8,9]
输出:[“0”,“2->4”,“6”,“8->9”]
解释:区间范围是:

  • [0,0] --> “0”
  • [2,4] --> “2->4”
  • [6,6] --> “6”
  • [8,9] --> “8->9”

解题思路

一种简单的方法是遍历数组,对连续的数字进行合并形成区间。具体步骤如下:

  1. 初始化一个结果列表,用于存储最终的区间范围。
  2. 使用双指针,分别标记区间的起始和结束位置。
  3. 遍历数组,如果当前数字与前一个数字连续,则更新结束位置;否则,将前一个区间加入结果列表,并更新起始和结束位置。
  4. 将最后一个区间加入结果列表。
  5. 返回结果列表。

算法实现

import java.util.ArrayList;
import java.util.List;public class SummaryRanges {public List<String> summaryRanges(int[] nums) {List<String> result = new ArrayList<>();if (nums == null || nums.length == 0) {return result;}int start = nums[0];int end = nums[0];for (int i = 1; i < nums.length; i++) {if (nums[i] == end + 1) {end = nums[i];} else {if (start == end) {result.add(Integer.toString(start));} else {result.add(start + "->" + end);}start = nums[i];end = nums[i];}}if (start == end) {result.add(Integer.toString(start));} else {result.add(start + "->" + end);}return result;}
}

复杂度分析

  • 时间复杂度:O(n),其中 n 为数组的长度。遍历一次数组。
  • 空间复杂度:O(1)。除了结果列表外,不需要额外的空间。

测试和验证

编写测试用例对算法进行验证,确保其正确性和健壮性。

public class Main {public static void main(String[] args) {SummaryRanges summaryRanges = new SummaryRanges();int[] nums1 = {0, 1, 2, 4, 5, 7};System.out.println(summaryRanges.summaryRanges(nums1)); // ["0->2", "4->5", "7"]int[] nums2 = {0, 2, 3, 4, 6, 8, 9};System.out.println(summaryRanges.summaryRanges(nums2)); // ["0", "2->4", "6", "8->9"]}
}

总结和拓展

本题通过简单的数组遍历和区间合并的方式,实现了求解给定有序整数数组的最小区间范围列表。这个算法简单高效,在处理类似问题时是一个不错的选择。

此外,我们也可以考虑优化算法以提高效率,例如使用更高效的数据结构或算法来实现同样的功能。

参考资料

  • 《力扣经典150题》
  • LeetCode 官方网站

http://www.ppmy.cn/server/27668.html

相关文章

【Linux】基于tcp的简单服务器程序

目录 服务端 成员变量 成员函数 工作流程 客户端 头文件和命名空间 信号处理函数 使用说明和重试机制 访问服务器的函数 主函数 总结和注意事项 所用到的其他类 线程池 线程类 翻译业务类 禁止拷贝类 守护锁类 网络地址转换类 日志类 守护进程类 服务端 这…

【Vue 2.x】学习vue之三路由

文章目录 Vue三路由第十章1、vue中的路由vue的应用分为a、多页面应用b、单页面应用 2、路由的基本应用1、基础2、使用3、加载 3、vue组件的分类1、普通组件2、路由组件 4、路由的嵌套5、路由传递Query参数1、拼接参数传递2、路由传递对象 6、简化路由1、命名路由 7、parms传递参…

Flutter笔记:DefaultTextStyle和DefaultTextHeightBehavior解读

Flutter笔记 DefaultTextStyle和DefaultTextHeightBehavior解读 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

018、Python+fastapi,第一个Python项目走向第18步:ubuntu24.04 安装cuda和pytorch环境

一、说明 我们安装了pytorch环境之后&#xff0c;会用yolo v9 来测试一下&#xff0c;看8g 显存能不能跑下来&#xff0c;上次用无影云电脑&#xff0c;4cpu8g内存直接爆了&#xff0c;云电脑也死机了&#xff0c;提示一直占用内存不释放&#xff0c;我自己的云电脑不能占用内…

HarmonyOS 应用开发——入门

首先当然是华为的官方文档了&#xff0c;要认真学习: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-overview-0000001478061421-V2 不想花时间看&#xff0c;可以看我下面总结的干货&#xff0c;哈哈 第一个问题&#xff1a;stage架构和fa架构的区…

在Centos7上部署LDAP服务

安装ldap和设置自起 - 安装ldap yum install -y openldap-servers openldap-clients openldap openldap-devel compat-openldap openldap-servers-sql- 启动和开机自起 systemctl start slapd systemctl enable slapd- 查看服务是否安装成功 配置ldap - 创建第一个管理账号…

02 spring-boot+mybatis+elementui 的登录,文件上传,增删改查的入门级项目

前言 主要是来自于 朋友的需求 项目概况 就是一个 学生信息的增删改查 然后 具体到业务这边 使用 mybatis xml 来配置的增删改查 后端这边 springboot mybatis mysql fastjson hutool 的一个基础的增删改查的学习项目, 简单容易上手 前端这边 node14 vue element…

PotatoPie 4.0 实验教程(32) —— FPGA实现摄像头图像浮雕效果

什么是浮雕效果&#xff1f; 浮雕效果是一种图像处理技术&#xff0c;用于将图像转换为看起来像浮雕一样的效果&#xff0c;给人一种凸起或凹陷的立体感觉&#xff0c;下面第二张图就是图像处理实现浮雕效果。 不过这个图是用Adobe公司的PS人工P图实现的&#xff0c;效果比较…