Summary Range

题目:Summary Range Input: [1, 2, 3, 5, 8, 10, 11, 12, 15], sorted, no duplicates Output: "1-3, 5, 8, 10-12, 15"

Q: Explain Algorithm, Time Complexity Go through example, how index updated and condition evaluated in each line

without deplicate

    public static List<String> summaryRanges(int[] nums) {
        List<String> res = new ArrayList<String>();
        if( nums == null || nums.length == 0) return res;

        int i = 0;
        for (i = 0; i < nums.length; i++){
            int j = i;
            while( j < nums.length - 1 && nums[j] + 1 == nums[j + 1]){
                j++;
            }
            if( i == j){
                res.add(String.valueOf(nums[i]));
            }else {
                res.add(String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]));
                i = j;
            }

        }

        return res;

    }
public class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> res = new ArrayList<String>();
        if( nums == null || nums.length == 0) return res;

        int i =0;
        while( i < nums.length){
            int j = i;
            while( j < nums.length - 1 && nums[j] + 1 == nums[j + 1]){
                j++;
            }
            if( i == j){
                res.add(String.valueOf(nums[i]));
                i++;
            }else {
                res.add(String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]));
                i = j + 1;
            }

        }

        return res;

    }
}

with duplicate

Input: [1, 2, 3, 5,5, 8, 10, 11, 12, 15,15], sorted, duplicates Output: [1->3, 5, 8, 10->12, 15]

    public static List<String> summaryRangesDup(int[] nums) {
        List<String> res = new ArrayList<String>();
        if( nums == null || nums.length == 0) return res;

        int i = 0;
        for (i = 0; i < nums.length; i++){
            int j = i;
            while( j < nums.length - 1 && (nums[j] + 1 == nums[j + 1] || nums[j] == nums[j + 1]) ){
                j++;
            }
            if( i == j || nums[i] == nums[j]){
                res.add(String.valueOf(nums[i]));
                i = j;
            }else {
                res.add(String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]));
                i = j;
            }

        }

        return res;

    }

Follow-up: [-3, -2, 1, 2, 3, 5, 8, 10, 11, 12, 15], does your code still work? ==>work

打印间隔

Another Array [1, 3, 5, 8, 12, 16], new output "1-5/2, 8-16/4"

    public static List<String> summaryRangeInter(int[] nums) {
        List<String> res = new ArrayList<String>();
        if( nums == null || nums.length == 0) return res;

        if( nums.length == 1) res.add(String.valueOf(nums[0]));

        int i = 0;
        for (i = 0; i < nums.length - 1; i++){
            int j = i + 1;

            int diff= nums[j] - nums[i];

            while( j < nums.length - 1 && ( nums[j + 1] - nums[j] == diff)){
                j++;
            }

            res.add(String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]) + "/" + diff);
            i = j;
            if( i == nums.length  - 2) res.add(String.valueOf(nums[i + 1]));   
        }

        return res;

    }

results matching ""

    No results matching ""