Summary Range
题目:Summary Range Input: [1, 2, 3, 5, 8, 10, 11, 12, 15], sorted, no duplicates Output: "1-3, 5, 8, 10-12, 15"
Q: Explain Algorithm, Time Complexity Go through example, how index updated and condition evaluated in each line
without deplicate
public static List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<String>();
if( nums == null || nums.length == 0) return res;
int i = 0;
for (i = 0; i < nums.length; i++){
int j = i;
while( j < nums.length - 1 && nums[j] + 1 == nums[j + 1]){
j++;
}
if( i == j){
res.add(String.valueOf(nums[i]));
}else {
res.add(String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]));
i = j;
}
}
return res;
}
public class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<String>();
if( nums == null || nums.length == 0) return res;
int i =0;
while( i < nums.length){
int j = i;
while( j < nums.length - 1 && nums[j] + 1 == nums[j + 1]){
j++;
}
if( i == j){
res.add(String.valueOf(nums[i]));
i++;
}else {
res.add(String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]));
i = j + 1;
}
}
return res;
}
}
with duplicate
Input: [1, 2, 3, 5,5, 8, 10, 11, 12, 15,15], sorted, duplicates Output: [1->3, 5, 8, 10->12, 15]
public static List<String> summaryRangesDup(int[] nums) {
List<String> res = new ArrayList<String>();
if( nums == null || nums.length == 0) return res;
int i = 0;
for (i = 0; i < nums.length; i++){
int j = i;
while( j < nums.length - 1 && (nums[j] + 1 == nums[j + 1] || nums[j] == nums[j + 1]) ){
j++;
}
if( i == j || nums[i] == nums[j]){
res.add(String.valueOf(nums[i]));
i = j;
}else {
res.add(String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]));
i = j;
}
}
return res;
}
Follow-up: [-3, -2, 1, 2, 3, 5, 8, 10, 11, 12, 15], does your code still work? ==>work
打印间隔
Another Array [1, 3, 5, 8, 12, 16], new output "1-5/2, 8-16/4"
public static List<String> summaryRangeInter(int[] nums) {
List<String> res = new ArrayList<String>();
if( nums == null || nums.length == 0) return res;
if( nums.length == 1) res.add(String.valueOf(nums[0]));
int i = 0;
for (i = 0; i < nums.length - 1; i++){
int j = i + 1;
int diff= nums[j] - nums[i];
while( j < nums.length - 1 && ( nums[j + 1] - nums[j] == diff)){
j++;
}
res.add(String.valueOf(nums[i]) + "->" + String.valueOf(nums[j]) + "/" + diff);
i = j;
if( i == nums.length - 2) res.add(String.valueOf(nums[i + 1]));
}
return res;
}