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;
    }
}
相关推荐
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
晨米酱1 天前
AGENTS.md:Agent 的上下文策略层
面试·架构·agent
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark1 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her11 天前
并查集-听课笔记
笔记·算法·并查集
码流子1 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
彧azz1 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
another heaven1 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法