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

        List<String> result = new ArrayList<String>();
        if (nums.length == 1) {
            result.add(Integer.toString(nums[0]));
            return result;
        }
        int slow = 0;
        int fast = 1;
        while(fast < nums.length) {
            if(nums[fast] - nums[fast - 1] == 1) {
                fast++;
            } else {
                if(slow < fast - 1) {
                    String str = Integer.toString(nums[slow]) + "->" + Integer.toString(nums[fast - 1]);
                    result.add(str);

                } else if (slow == fast - 1) {
                    result.add(Integer.toString(nums[fast - 1]));
                }
                slow = fast;
                fast++;
            }
        }

        if(slow < fast - 1) {
            String str = Integer.toString(nums[slow]) + "->" + Integer.toString(nums[fast - 1]);
            result.add(str);

        } else if (slow == fast - 1) {
            result.add(Integer.toString(nums[fast - 1]));
        }

        return result;

    }
}
  1. Followup,如果输入有deplicate numbers,怎么办?

[1,2,2,3] == 1->3

[1,2,2,5] == 1->2, 5

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

        List<String> result = new ArrayList<String>();
        if (nums.length == 1) {
            result.add(Integer.toString(nums[0]));
            return result;
        }
        int slow = 0;
        int fast = 1;
        while(fast < nums.length) {
            if(nums[fast] - nums[fast - 1] == 1 || nums[fast] - nums[fast - 1] == 0) {
                fast++;
            } else {
                if(slow < fast - 1) {
                    String str = Integer.toString(nums[slow]) + "->" + Integer.toString(nums[fast - 1]);
                    result.add(str);

                } else if (slow == fast - 1) {
                    result.add(Integer.toString(nums[fast - 1]));
                }
                slow = fast;
                fast++;
            }
        }

        if(slow < fast - 1) {
            String str = Integer.toString(nums[slow]) + "->" + Integer.toString(nums[fast - 1]);
            result.add(str);

        } else if (slow == fast - 1) {
            result.add(Integer.toString(nums[fast - 1]));
        }

        return result;

    }
}

results matching ""

    No results matching ""