leetcode算法228.汇总区间

简介: 如何用leetcode算法228.汇总区间?本文带大家解决这个问题。

一、leetcode算法



1、汇总区间


1.1、题目


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


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


列表中的每个区间范围 [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、思路


思路一:此题我们可以对数据进行一次遍历,从左向右开始遍历,判断相邻两个数是否差值为1,如果为1则加入字符串“->”,如果不为1,则进行单独插入。


1.3、答案


14.png


class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> ret = new ArrayList<String>();
        int i = 0;
        int n = nums.length;
        while(i < n){
            int low = i;
            i++;
            //如果相连的数据都大于1则循环
            while(i < n && nums[i] == nums[i - 1] + 1){
                i++;
            }
            int high = i - 1;
            StringBuffer temp = new StringBuffer(Integer.toString(nums[low]));
            if(low < high){
                temp.append("->");
                temp.append(Integer.toString(nums[high]));
            }
            ret.add(temp.toString());
        }
        return ret;
    }
}


复杂度分析


时间复杂度:O(n),其中 n 为数组的长度。


空间复杂度:O(1)。除了用于输出的空间外,额外使用的空间为常数。


相关文章
|
4天前
|
算法
LeetCode第57题插入区间
LeetCode第57题"插入区间"的解题方法,利用原区间集有序的特性,通过三步插入操作,有效实现了新区间的插入和重叠区间的合并。
LeetCode第57题插入区间
|
11天前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
29 6
|
11天前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
30 2
|
11天前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
26 1
|
11天前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
22 1
|
12天前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
31 0
|
12天前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
23 0
|
12天前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
19 0
|
12天前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
10 0
|
12天前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
23 0