汇总区间
要点:遍历,模拟
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 │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
对象分配完整流程
- 栈上分配:逃逸分析判定对象不逃出方法,直接分配在虚拟机栈,GC 无需回收
- TLAB 分配:栈逃逸,优先线程本地分配缓冲区,避免堆竞争锁,分配 Eden 区
- Eden 普通分配:TLAB 空间不足,Eden 区分配
- 老年代直接分配:大
碎碎念:后续会更新每天学习的八股和算法 题,开始准备秋招的第38天。努力连续更新100天!以后每天就按,秋招项目【java +agent】,科研,必做项目,算法,八股,锻炼身体来总结。
总结:尽量把事情干完在玩手机,不是不玩是控制一下玩
1.算法面试150 69/150【早中晚】 2h
2.秋招项目,【java 项目】,1/6;【修改了一下,1h】
【agent 项目 】1/6,无【30min】
3.科研要跑一下,无
4.检测项目,准备数据集【6h】
6.背八股,无
7.锻炼身体,【1h】
反思:快把杂活干完,然后认真学习,尽量每个部分每天都能兼顾一下,要不然老师一个事情没干完就好几天没时间继续了