| 
                            
                                  原题链接 : 
 给定一个  无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按如下格式输出: 
	"a->b" ,如果 a != b"a" ,如果 a == b   示例 1: 
	
		
			| 1 2 3 4 5 6 | 输入:nums = [0,1,2,4,5,7] 输出:["0->2","4->5","7"] 解释:区间范围是: [0,2] --> "0->2" [4,5] --> "4->5" [7,7] --> "7" |  示例 2: 
	
		
			| 1 2 3 4 5 6 7 | 输入:nums = [0,2,3,4,6,8,9] 输出:["0","2->4","6","8->9"] 解释:区间范围是: [0,0] --> "0" [2,4] --> "2->4" [6,6] --> "6" [8,9] --> "8->9" |  提示: 
0 <= nums.length <= 20 -2^31 <= nums[i] <= 2^31 - 1 
	nums 中的所有值都 互不相同nums 按升序排列 思路分析本题思路比较明晰,设立双指针,一前一后遍历数组,当遇到结果不是有序递增,即nums[j]+1 != nums[j+1]时,中断数组,从i,到j进行条件判断插入字符串,插入完之后,将i移动到j后面那个位置,即i = j + 1。 本题难点在于边界处理,因为涉及到j+1,遍历时只能遍历到n-1,最后一位需要依照相同的思路重新判断一遍,如果数组为空或者只有一个元素,循环语句也不好判断,因为无法与第二个元素相比较。有评论使用逃课方法,即在数组后额外安插一个整型最大值,但这样的方法如果数组原本最后一个元素是最大值-1时,会导致结果错误不能使用。 AC 代码
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | vector summaryRanges(vector &nums) {     vector s;     if (nums.size() == 0)         return s;     if (nums.size() == 1) {         s.push_back(to_string(nums[0]));         return s;     }     int i = 0, j = 0, n = nums.size();     string t;     for (; j < n - 1; j++) {         if (nums[j] + 1 != nums[j + 1]) {             if (i == j)                 s.push_back(to_string(nums[i]));             else                 s.push_back(to_string(nums[i]) + "->" + to_string(nums[j]));             i = j + 1;         }     }     if (i == j)         s.push_back(to_string(nums[i]));     else         s.push_back(to_string(nums[i]) + "->" + to_string(nums[j]));     return s; } |  
 |