LeetCode228——Summary Ranges

来源:互联网 发布:网络舆情周期 编辑:程序博客网 时间:2024/06/08 08:07

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<String> list = summary.summaryRanges(nums);for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}public List<String> summaryRanges(int[] nums) {if (nums == null) {return null;}if (nums.length <= 0) {return new ArrayList<String>();}List<String> list = new ArrayList<String>();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);elselist.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;}}



0 0
原创粉丝点击