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;
}
}
- 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;
}
}