leetcode丑数-合集
丑数Ⅰ丑数Ⅱ原题链接:https://leetcode.cn/problems/ugly-number-ii/
解法1 优先队列123456789101112131415161718192021222324252627282930313233343536373839/** 打表 对于任意一个丑数 x,其与任意的质因数 (2、3、5)相乘,结果 (2x、3x、5x) 仍为丑数 */class Solution { public static final int N = 1690; public static int [] ans = new int[N]; public static long [] nums = new long[]{2,3,5}; static { // 最小堆 // 这个点非常的坑 // Long 这里排序 不能用 o1 - o2 因为会存在溢出问题 一定要统一使用 o1.compareTo(o2) PriorityQueue<Long&g ...
leetcode23合并k个升序链表
原题链接:https://leetcode.cn/problems/merge-k-sorted-lists/
解法1: 堆123456789101112131415161718192021222324252627282930313233343536373839404142/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */class Solution { public ListNode mergeKLists(ListNode[] lists) ...
leetcode2698求一个整数的惩罚数
原题链接:https://leetcode.cn/problems/find-the-punishment-number-of-an-integer/description/
解法1: 递归123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354class Solution { /* * 打表预处理 * 递归求解 * */ // 将[1,1000] 所有符合条件的惩罚数 都储存再 PRE_SUM数组中继续记录 private static final int [] PRE_SUM = new int[1001]; // 静态方法 只会运行一次 static { for(int i = 1 ; i <= 1000 ; i++){ // 转换为字符串 char [] s = Integer.toString ...
javaStream流
Stream流Stream流的作用:结合了Lambda表达式 简化集合、数组的操作
Stream流的使用步骤
先得到一条Stream流 并把数据放上去
利用Stream流中的API进行各种操作(如 过滤 转换 统计 打印等等)
中间方法: 方法调用完之后,还可以调用其他方法 如:过滤 转换
终结方法: 最后一步,调用完毕之后,不能调用其他方法 如:统计 打印
使用中间方法对流水线上的数据进行操作
使用终结方法对流水线上的数据进行操作
先得到一条Stream流 并把数据放上去
中间方法
代码示例
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"a","ab","bc");// filter ...
leetcode350两个数组的交集Ⅱ
原题链接:https://leetcode.cn/problems/intersection-of-two-arrays-ii/
哈希集合12345678910111213141516171819202122232425class Solution { public int[] intersect(int[] nums1, int[] nums2) { HashMap<Integer,Integer> hash = new HashMap<>(); for(var x : nums1){ int count = hash.getOrDefault(x,0); count++; hash.put(x,count); } int [] ans = new int[Math.min(nums1.length,nums2.length)]; int k = 0; for(var ...
java算法题常用函数以及集合
Heap123456789101112131415161718public class demo { public static void main(String[] args) { // 默认小根堆 PriorityQueue<Integer>heap1 = new PriorityQueue<>(); Collections.addAll(heap1,1,2,3,4); heap1.stream().forEach(s-> System.out.println(s)); // 通过传入比较器 使其成为大根堆 // 比较器使用lambda 进行简化 PriorityQueue<Integer>heap2 = new PriorityQueue<>((o1,o2) -> o2 - o1); Collections.addAll(heap2,9,2,3,4); heap2.strea ...
java集合进阶(Hash)
双列集合单列集合一次只能添加一个元素双列集合一次可以添加一对元素(键与值一一对应)
键值对 — Entry 对象
双列集合的特点
Map集合常见API
双列集合添加用put 而不是add
遍历
键找值
键值对
lambda表达式
123456789101112131415161718192021222324252627282930313233343536373839404142Map<String,String> map = new HashMap<>();// 键找值// 获取所有键 把这些键放到一个单列集合中Set<String> keys = map.keySet();for (String key : keys) { System.out.println(key); // 利用map集合中的键获取对应的值 get map.get(key);}// 通过键值对进行遍历// 通过一个方法获取所有的键值对对象 返回一个Set集合Set<Map.Entry<String, String> ...
leetcode128最长连续序列
原题链接:
https://leetcode.cn/problems/longest-consecutive-sequence/
解法1 哈希集合 标记数12345678910111213141516171819202122232425262728class Solution { /** * 法1: * 哈希集合标记 */ public int longestConsecutive(int[] nums) { HashSet<Integer>hash = new HashSet<>(); for(var x : nums){ hash.add(x); } int ans = 0; for(var x : nums){ // 前一个元素没有在集合中 说明该连续序列没有统计过 if(hash.contains(x ...
leetcode2316统计无向图中无法互相达到点对数
原题链接:
https://leetcode.cn/problems/count-unreachable-pairs-of-nodes-in-an-undirected-graph/description/
解法1: 并查集123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263typedef long long LL; class Solution {public: vector<int>p; // 并查集的根 及其 集合内对应点的数量 unordered_map<int,int>cnt; int find(int x){ if(x!=p[x]){ p[x] = find(p[x]); } return p[x]; } // 合并 ...
JVM_6自动垃圾回收
C/C++ 内存管理
Java的内存管理Java中为了简化对象的释放 引入了自动的垃圾回收(Garbage Collection简称GC)机制通过垃圾回收器来对不再使用的对象完成自动的回收 垃圾回收器主要负责对堆上的内存进行回收其他很多现代的语言比如C# Python Go都拥有自己的垃圾回收器
垃圾回收的对比
垃圾回收应用场景
解决系统僵死的问题: 大厂的系统出现的许多系统僵死问题 都与频繁的垃圾回收
性能优化: 对垃圾回收器进行合理的设置可以有效地提升程序的执行性能
高频面试题
常见的垃圾回收器
常见的垃圾回收算法
四种引用
项目中用了哪一种垃圾回收器
方法区的回收线程不共享的部分 都是伴随着线程的创建而创建 线程的销毁而销毁而方法的栈帧在执行完方法之后就会自动弹出栈并释放掉对应的内存
方法区中能回收的内容主要就是不再使用的类判定一个类可以被卸载 需要同时满足以下三个条件
此类所有实例对象都已经被回收 在堆中不存在任何该类的实例对象以及子类对象
加载该类的类加载器已经被回收
该类对应的java.lang.Class 对象没有在任何地方被引用
堆回收Jav ...