LeetCode 228. Summary Ranges (总结区间)

Given a sorted integer array without duplicates, return the summary of its ranges.

Example 1:

Input: [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]

 

Example 2:

Input: [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]

 


题目标签:Array

  题目给了我们一个nums array, 让我们找出它的区间总结。

  这题可以用two pointers 来做, 设一个left 和 right 起初都等于0。遍历nums array,如果遇到了 当前数字 等于 前一个数字+1, 那么就把right = i,扩大这个sliding window 的范围;如果遇到的 当前数字 不等于 前一个数字+1,意味着此时需要把前面的区间left 到 right加入list,因为这里已经断点了。而且还需要更新left 和 right 都等于 目前的 i, 让sliding window 重新开始。

  还需要注意的是,遍历完nums 之后,还需要把最后的区间 加入 list。

 

 

Java Solution:

Runtime beats 51.99% 

完成日期:09/06/2017

关键词:Array, Two Pointers

关键点:利用left 和 right 来控制sliding window 的大小(区间)

 

 1 class Solution 
 2 {
 3     public List<String> summaryRanges(int[] nums) 
 4     {
 5         List<String> res = new ArrayList<>();
 6         
 7         if(nums == null || nums.length == 0)
 8             return res;
 9         
10         int left = 0, right = 0;
11         
12         for(int i=1; i<nums.length; i++)
13         {
14             // if current number is not equal to previous number + 1, add the range into list
15             if(nums[i] != nums[i-1] + 1)
16             {
17                 // if just one number
18                 if(left == right)
19                     res.add("" + nums[left]);
20                 else// if more than one number
21                     res.add("" + nums[left] + "->" + nums[right]);
22                 
23                 // if find the gap, update the left and right
24                 left = i;
25                 right = i;
26             }
27             else if(nums[i] == nums[i-1] + 1) // if find the correct number, increase right
28                 right = i;
29             
30         }
31         
32         // add the last range
33         if(left == right)
34             res.add("" + nums[left]);
35         else // if more than one number
36             res.add("" + nums[left] + "->" + nums[right]);
37         
38         return res;
39     }
40 }

参考资料:N/A

 

LeetCode 算法题目列表 - LeetCode Algorithms Questions List

 

posted @ 2017-09-07 09:48  Jimmy_Cheng  阅读(200)  评论(0编辑  收藏  举报