LeetCode228——Summary Ranges

leetcode刷题日记——Summary Ranges

1.题目内容:

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"].

2.题目理解

           题目主要意思就是给定一个已经排序好了并且没有重复的数组,通过扫描这个数组,给出这个数组元素范围总结概括。在一组两两之间差距为1的一组元素中,范围为开始那个数组到最后那个数字。例如:0,1,2,3,4,5 它的范围就是0->5,;如果某个数字与前后的数字差值都大于1,则它的范围就是它本身;例如for example中的7。

3.思路

          首先,默认第一个范围的开始元素(start)和结尾元素(end)就是数组的第0个元素。然后逐个与后面的元素比较,一旦某个元素与前面的元素差值大于1,就产生从把从start到end形成一个新的返回。

4.实现代码:

import java.util.ArrayList;
import java.util.List;

public class CopyOfSummaryRanges {

	public static void main(String[] args) {

		CopyOfSummaryRanges summary = new CopyOfSummaryRanges();

		int[] nums = { 0, 1, 2, 4, 5, 7, 9 };

		List list = summary.summaryRanges(nums);

		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}

	}

	public List summaryRanges(int[] nums) {

		if (nums == null) {
			return null;
		}
		if (nums.length <= 0) {
			return new ArrayList();
		}

		List list = new ArrayList();

		if (nums.length == 1) {
			list.add(nums[nums.length - 1] + "");
			return list;
		}

		// 正常情况下的业务逻辑
		int start = nums[0], end = nums[0];

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

			//如果两个数相连  就将end向后移动
			if (nums[i] - nums[i - 1] == 1) {
				end = nums[i];
			} else {
				//如果前后两个数字不相连 也就是范围需要分开 这个时候就开始将前面的start和end形成一个新的返回总结
				if (start != end)
					list.add("" + start + "->" + end);
				else
					list.add("" + start);
				//对于start和end重新定位
				start = nums[i];
				end = nums[i];
			}
			if (i == nums.length - 1) {
				if (start == end) {
					list.add("" + start);
				} else {
					list.add("" + start + "->" + end);
				}
			}
		}

		return list;

	}
}



你可能感兴趣的:(算法)