跳过正文
  1. leetcode 题解/

228_汇总区间

·108 字·1 分钟

类型:数组

    1. 汇总区间 💚

    https://leetcode-cn.com/problems/summary-ranges/

    ❓ 对于无重复元素的有序整数 nums,描述 nums 中数据的范围。

    输入:nums = [0,1,2,4,5,7] 输出:[“0->2”,“4->5”,“7”]

    💡 一次遍历

    我们从数组头部出发,向右遍历。每次遇到相邻元素差值大于 1 时,我们就找到了一个新区间。维护下标 low 和 high 分别记录区间的起点终点。

    • 当 low < high 时,区间的字符串表示为 “low → high”
    • 当 low = high 时,区间的字符串表示为 “low”
    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++;
                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),空间复杂度:O(1)