code通过删除字母匹配到字典序里最长单词(高频华为出现多次!!!)
华为一面\华为主管面 手撕代码题目
原题链接:https://leetcode.cn/problems/longest-word-in-dictionary-through-deleting/description/
1234567891011121314151617181920212223242526272829303132333435363738394041/** 贪心 + 双指针 删除某些字母得到 = 该单词为字符串s的子序列 且 是有序的 按照长度排序 那么最先匹配完成的就是就是符合答案的 题目又要求字典序最小 那就再按照字典序进行排序 */class Solution { public String findLongestWord(String s, List<String> dictionary) { /* * compareTo 相等返回 0 * 小于返回 -1 * 大于返回 1 * */ Collections ...
code最长上升子序列
字节校招面试 手撕代码题
原题链接https://www.acwing.com/problem/content/897/
1234567891011121314151617181920212223242526272829303132333435363738import java.util.*;/** 动态规划 f[i] 表示 结尾为i 数值严格单调递增的子序列的最长度值为f[i]* f[i] = max(f[j] + 1, f[i])* */public class Main { public static final int N = 1010; public static void main(String[] args) { int [] q = new int[N]; int n = 0; Scanner sc = new Scanner(System.in); n = sc.nextInt(); for(int i = 0 ; i < n ; i++){ ...
javaIO
IO 概述I: input O:Output 流: 像水流一样传输数据
内存不能永久化存储 程序停止 数据丢失
IO流: 存储和读取数据的解决方案
File : 表示系统中的文件或者文件夹的路径 (获取文件信息 判断文件的类型 创建文件/文件夹 删除文件/文件夹 … )注意: File类只能对文件本身进行操作 不能读写文件里面存储的数据
IO流 用于读写文件中的数据(可以读写文件 或 网络中的数据)
问: IO流中 谁在读 谁在写? 以谁为参照物看读写的方向呢?答: 以程序为参照物 是程序在读 程序在写
IO的分类
纯文本文件: windows自带记事本能打开且能读懂的就是纯文本
IO流的体系
字节流FileOutputStream操作本地文件的字节输出流体 可以把程序中的数据写到本地文件中
代码示例
123456789101112131415161718192021222324252627282930import java.io.FileOutputStream;import java.io.IOException;public class Mai ...
leetcode74搜索二分矩阵
原题链接:https://leetcode.cn/problems/search-a-2d-matrix/description/
解法1: 二次二分12345678910111213141516171819202122232425262728293031323334353637383940414243/** 两次二分 */class Solution { public boolean searchMatrix(int[][] matrix, int target) { // 二分合适的行 int l = -1 , r = matrix.length; while(l + 1 < r){ int mid = l + r >> 1; // l target mid r if(matrix[mid][0] >= target){ r = mid; } ...
leetcode895最大频率栈
原题链接:https://leetcode.cn/problems/maximum-frequency-stack/description/
解法1: 双哈希1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556/** 双哈希 一个hash记录值 及其 对应的出现次数 另一个hash 记录 次数出现相同的数 的集合 max 记录当前出现的最大频率 即根据题意需要返回的数 */class FreqStack { // 出现次数 以及 对应的数 HashMap<Integer,List<Integer>> map = new HashMap<>(); // 记录每个数出现的次数 HashMap<Integer,Integer> cnts = new HashMap<>(); int max; public F ...
java多线程基础
什么是多线程线程进程
为什么要有多线程应用场景
多线程的两个概念并发 在同一时刻 有多个指令在单个CPU上交替执行并行 在同一时刻 有多个指令在多个CPU上同时执行
多线程的实现方式
继承Thread类的方式进行实现
实现Runnable接口的方式进行实现
利用Callable接口和Future接口方式实现
继承Thread类的方式进行实现代码示例
123456789101112public class MyThread1 extends Thread{ @Override public void run() { // 书写线程要执行的代码 for (int i = 0; i < 100; i++) { System.out.println(getName() + "hello world"); } }}
12345678910111213141516171819public class Main { ...
leetcode1438绝对差不超过限制的最长连续子数组
原题链接:https://leetcode.cn/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/description/
解法1: 滑动窗口 + 单调队列12345678910111213141516171819202122232425262728293031323334353637383940class Solution { /* * 滑动窗口 * 使用left和right两个指针 分别指向滑动窗口的左右边界 使用TreeMap保存滑动窗口的所有元素 * right 主动右移 right每移动一步 把A[right] 放入滑动窗口 * left 被动右移 判断此时窗口内最大值和最小值的差 如果大于limit 则left指针被迫右移 left右移之前需要把A[left]从TreeMap中减去一次 * */ public int longestSubarray(int[] nums, int limit) ...
leetcode767重构字符串
原题链接:https://leetcode.cn/problems/reorganize-string/
解法1: 贪心 + 堆1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556class Solution { public String reorganizeString(String s) { int [] count = new int[26]; var ss = s.toCharArray(); int n = ss.length; if(n < 2){ return s; } for(var c:ss){ count[c - 'a']++; if(count[c ...
leetcode88合并两个有序数组
原题链接:https://leetcode.cn/problems/merge-sorted-array/
解法1: 双指针最优解
1234567891011121314151617181920212223242526272829/** 双指针 初始化三个指针 p1 = m - 1 , p2 = n - 1 p = m + n - 1 核心思想就是从后往前进行合并 因为nums1后面的位置是空的 一个极端的情况 如果nums1中所有元素都比nums2大 那么就是将nums1中所有元素都移动到后面 而此时相当于nums1前面的位置都空出来了 直接填入nums2即可 不需要考虑覆盖问题*/class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int p = m + n - 1; int p1 = m - 1; int p2 = n - 1; // 如果p2还有要合并 ...
leetcode1465切割后面积最大的蛋糕
原题链接:https://leetcode.cn/problems/maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/
解法1: 贪心1234567891011121314151617181920212223242526class Solution { /** 贪心 因为窗口都是由两条横切 和 两条纵切直接确定 所以先确定横切 然后求出纵切最大那么最后得到的就是答案 */ public final int MOD = (int)(1e9 + 7); // 他这里面 horizontalCuts verticalCuts 里面给都不是排序好的 还是有些坑的 public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) { return (int)((getMax(horizontalCuts,h) * getMa ...