228. 汇总区间
题目:


题解:
第一版是我最开始想的,后面都是优化完成的,但是第二版和第三版区别感觉没有很大
java
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> list = new ArrayList<>();
Set<Long> ss = Arrays.stream(nums)
.mapToLong(i -> (long) i)
// IntStream → LongStream
.boxed()
// LongStream → Stream<Long>
.collect(Collectors.toSet());
Set<Long> set = new TreeSet<>(ss);
for(Long s:set) {
if(!set.contains(s-1)) {
long l = s;
long r = s;
while(set.contains(r)) {
r++;
}
r--;
if(l!=r) {
list.add(String.valueOf(l)+"->"+r);
}
else {
list.add(String.valueOf(l));
}
}
}
return list;
}
}
java
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> list = new ArrayList<>();
Arrays.sort(nums);
for(int i=0;i<nums.length;) {
int l = nums[i];
int r = nums[i];
while(i<nums.length&&r==nums[i]) {
i++;
r++;
}
r--;
if(l==r) {
list.add(String.valueOf(l));
}
else {
list.add(String.valueOf(l)+"->"+String.valueOf(r));
}
}
return list;
}
}
java
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> list = new ArrayList<>();
if(nums == null || nums.length==0) {
return list;
}
Arrays.sort(nums);
int l = nums[0];
int r = nums[0];
for(int i=0;i<nums.length;i++) {
if(r==nums[i]) {
r++;
}
else {
r--;
if(l==r) {
list.add(String.valueOf(l));
}
else {
list.add(String.valueOf(l)+"->"+String.valueOf(r));
}
l=nums[i];
r=nums[i];
i--;
}
}
r--;
if(l==r) {
list.add(String.valueOf(l));
}
else {
list.add(String.valueOf(l)+"->"+String.valueOf(r));
}
return list;
}
}