2023-08-26 LeetCode每日一题(汇总区间)

2023-08-26每日一题

一、题目编号

复制代码
228. 汇总区间

二、题目链接

点击跳转到题目位置

三、题目描述

给定一个 无重复元素 的 有序 整数数组 nums 。

返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。

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

  • "a->b" ,如果 a != b
  • "a" ,如果 a == b

示例 1:

示例 2:

提示:

  • 0 <= nums.length <= 20
  • -231 <= numsi <= 231 - 1
  • nums 中的所有值都 互不相同
  • nums 按升序排列

四、解题代码

cpp 复制代码
class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> res;
        int n = nums.size();
        if(n == 0){
            return res;
        }
        if(n == 1){
            res.push_back(to_string(nums[0]));
            return res;
        }
        int left = nums[0];
        int right = nums[0];
        for(int i = 0; i < n; ++i){
            if(i == 0){
                continue;
            }
            if(nums[i] != nums[i-1] + 1){
                if(left == right){
                    res.push_back(to_string(left));
                } else{
                    res.push_back(to_string(left) + "->" + to_string(right));
                }
                left = nums[i];
                right = nums[i];
            } else{
                right = nums[i];
            }
        }
        if(left == right){
            res.push_back(to_string(left));
        } else{
            res.push_back(to_string(left) + "->" + to_string(right));
        }
    return res;
    }
};

五、解题思路

(1) 记录结果数组为res。有序整数数组的长度为n。

(2) n等于0的时候,输出空数组,n等于的时候,只有一个数。

(3) 记录区间left = nums0,right = nums0,这是初始化的过程。从i等于1开始遍历。

(4) 如果numsi 等于 numsi-1 + 1,更新右端,如果不等于,则判断left和right是否相等。如果相等,区间为单一数字,如果不相等,则左端为left,右端为right,此时再次将left和right更新为numsi (当前遍历的位置)。

(5) 当一遍数组遍历完毕后还需要再判断一次left和right是否相等,按照(4)中所述的规则记录最后一个区间。

(6) 最后返回结果数组即可。

相关推荐
启观川5 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸5 小时前
排序算法介绍
python·算法·排序算法
动词ing6 小时前
【题目练习】算法 组合总和||
算法
longlongzihan7 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
专业程序开发源7 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
Logic1017 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
yi0117 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
极光通讯8 小时前
服务器内存来料检验(IQC)实操:批次追溯、外观判定与上机验证
java·服务器·算法
淡海水8 小时前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
ClickHouseDB8 小时前
ClickHouse 大规模 OpenTelemetry 数据接入架构的可靠性演进
算法