day26(12.6)——leetcode面试经典150

228. 汇总区间

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;
    }
}
相关推荐
昵称小白5 小时前
复杂度分析方法
算法
科研前沿5 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
学涯乐码堂主7 小时前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa8 小时前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073218 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
女生也可以敲代码9 小时前
AI时代下的50道前端开发面试题:从基础到大模型应用
前端·面试
aini_lovee10 小时前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong999010 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语50510 小时前
深入理解主成分分析(PCA)
算法
apollowing10 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app