package com.interview.array; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Date 10/19/2016 * @author Tushar Roy * * Given a sorted integer array without duplicates, return the summary of its ranges. * For example, given [0,1,2,4,5,7], return ["0->2","4->5","7"]. * * Solution - * Just check if num[i] + 1 != num[i + 1]. If its not equal means you need to add previous range to result * and start a new range. * * Time complexity O(n) * * https://leetcode.com/problems/summary-ranges/ */ public class SummaryRanges { public List<String> summaryRanges(int[] nums) { if (nums.length == 0) { return Collections.EMPTY_LIST; } if (nums.length == 1) { return Collections.singletonList(String.valueOf(nums[0])); } int start = 0; List<String> result = new ArrayList<>(); for (int i = 0; i < nums.length - 1; i++) { if ((nums[i] + 1) != nums[i + 1]) { result.add(makeRange(nums[start], nums[i])); start = i + 1; } } if ((nums[nums.length - 2] + 1) != nums[nums.length - 1]) { start = nums.length - 1; } result.add(makeRange(nums[start], nums[nums.length - 1])); return result; } private String makeRange(int a, int b) { if (a == b) { return String.valueOf(a); } return a + "->" + b; } }