leecodecode【面试150】【2026.6.17打卡-java版本】

汇总区间

要点:遍历,模拟

复制代码
class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> ret = new ArrayList<String>();
        int i = 0;
        int n = nums.length;
        while (i < n) {
            int low = i;
            i++;
            while (i < n && nums[i] == nums[i - 1] + 1) {
                i++;
            }
            int high = i - 1;
            StringBuffer temp = new StringBuffer(Integer.toString(nums[low]));
            if (low < high) {
                temp.append("->");
                temp.append(Integer.toString(nums[high]));
            }
            ret.add(temp.toString());
        }
        return ret;
    }
}

合并区间

要点:排序的写法,排左端

java 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        //排序.
        Arrays.sort(intervals, (p,q)->p[0]-q[0]);
        //int[]类型的
        List<int[]> ans = new ArrayList<>();

        for(int[] interval : intervals ){
            int size = ans.size();
            if(size >0 && ans.get(size-1)[1] >= interval[0] ){
                ans.get(size-1)[1] = Math.max(ans.get(size-1)[1], interval[1]);
            }else{
                ans.add(interval);
            }
        }

        //list转数组
        return ans.toArray(new int[ans.size()][]);

        
    }
}

插入区间

要点:找到插入的地方,然后就是是一题的合并

java 复制代码
class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
        //找到一个人数组 newstart在他们中间 然后就是合并
        //用List
        List<int[]> ans = new ArrayList<>();
        int n = intervals.length;
        int i = 0;
        int start = newInterval[0];
        int end = newInterval[1];
        while(i < n && intervals[i][1] < start){
            ans.add(intervals[i]);
            i++;
        }

        while(i < n && end >= intervals[i][0]){
            start = Math.min(start, intervals[i][0]);
            end = Math.max(end, intervals[i][1]);
            i++;
        }
        ans.add(new int[]{start,end});

        while(i < n ){
            ans.add(intervals[i]);
            i++;
        }

        return ans.toArray(new int[ans.size()][]);

    }
}

用最少数量的箭引爆气球

要点:排序,排右端点

java 复制代码
class Solution {
    public int findMinArrowShots(int[][] points) {

        if(points.length == 0){
            return 0;
        }
        //排序
        Arrays.sort(points,Comparator.comparingInt(p -> p[1]));
        long pre = Long.MIN_VALUE;
        int ans = 0;


        for(int[] point : points){
            if(point[0] > pre){
                ans++;
                pre = point[1];
            }
        }

        return ans;
        
    }
}

随机知识

VM 运行时数据区总图(绘图标注要点)

plaintext

复制代码
┌───────────────────────────────────────────────────── JVM内存 ─────────────────────────────────────────────────────┐
│  线程私有(每个线程独立,线程销毁自动释放)                                                                       │
│  ├─ 程序计数器 PC Register:记录当前线程执行字节码行号,无OOM,唯一无内存溢出区域                               │
│  ├─ 虚拟机栈 JVM Stack:存栈帧(局部变量表、操作数栈、动态链接、方法出口);局部变量、引用、基本类型、方法调用栈 │
│  └─ 本地方法栈 Native Method Stack:native本地方法栈帧,和虚拟机栈结构一致                                       │
│                                                                                                                 │
│  线程共享(全局,GC管理,易OOM)                                                                                 │
│  ├─ 堆 Heap:所有对象实例、数组;分新生代(Eden/S0/S1)、老年代;GC主战场                                         │
│  ├─ 方法区 Method Area(元空间Metaspace):类模板、静态变量、常量、即时编译代码、运行时常量池                     │
│  │    └─ 运行时常量池:字符串常量池、数字常量、符号引用                                                         │
│  └─ 直接内存 Direct Memory:堆外内存,NIO缓冲区,不受堆大小限制,溢出抛DirectBuffer OOM                         │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

对象分配完整流程

  1. 栈上分配:逃逸分析判定对象不逃出方法,直接分配在虚拟机栈,GC 无需回收
  2. TLAB 分配:栈逃逸,优先线程本地分配缓冲区,避免堆竞争锁,分配 Eden 区
  3. Eden 普通分配:TLAB 空间不足,Eden 区分配
  4. 老年代直接分配:大

碎碎念:后续会更新每天学习的八股和算法 题,开始准备秋招的第38天。努力连续更新100天!以后每天就按,秋招项目【java +agent】,科研,必做项目,算法,八股,锻炼身体来总结。

总结:尽量把事情干完在玩手机,不是不玩是控制一下玩

1.算法面试150 69/150【早中晚】 2h

2.秋招项目,【java 项目】,1/6;【修改了一下,1h】

【agent 项目 】1/6,无【30min】

3.科研要跑一下,无

4.检测项目,准备数据集【6h】

6.背八股,无

7.锻炼身体,【1h】

反思:快把杂活干完,然后认真学习,尽量每个部分每天都能兼顾一下,要不然老师一个事情没干完就好几天没时间继续了