类型:数组
-
- 汇总区间 💚
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)