
笔记
文章平均质量分 89
Listen·Rain
承认自己的无知,乃是开启智慧的大门
展开
-
深度优先搜索专题
深度优先搜索1.导论2.模板2.1 二维矩阵类搜索模板1.导论深度优先搜索的本质还是递归,因此还是递归三部曲:1.递归结束条件2.模板2.1 二维矩阵类搜索模板private int[][] direction = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};public T dfs(int[][] matrix, int i, int j) { if (满足输出条件) { // 根据是否有返回值进行返回 return T; } // 上下左右进行原创 2022-04-05 09:42:08 · 244 阅读 · 0 评论 -
leetcode(并查集专题)
1.导论2.编程题并查集//并查集(管理一系列不想交的集合),具有查询和合并的功能class DisjointSetUnion { int[] f;//存储每个元素的根节点 int[] rank;//记录每个根节点对应树的深度 int n;//元素个数 public DisjointSetUnion(int n) { this.n = n; this.rank = new int[n];//记录每个根节点对应树的深度原创 2021-12-21 11:39:46 · 833 阅读 · 0 评论 -
leetcode(图论专题)
图论1.导论2.编程题2.1 127. 单词接龙1.导论2.编程题2.1 127. 单词接龙字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列:序列中第一个单词是 beginWord 。序列中最后一个单词是 endWord 。每次转换只能改变一个字母。转换过程中的中间单词必须是字典 wordList 中的单词。给你两个单词 beginWord 和 endWord 和一个字典 wordList ,找到从 beginWord 到原创 2021-12-17 14:45:31 · 2063 阅读 · 0 评论 -
leetcode(专题汇总)
专题汇总1.数组2.链表3.哈希表4.字符串5.栈与队列6.二叉树7.回溯算法8.贪心算法9.动态规划1.数组2.链表3.哈希表4.字符串5.栈与队列6.二叉树7.回溯算法8.贪心算法9.动态规划原创 2021-12-08 18:12:13 · 3099 阅读 · 0 评论 -
leetcode(单调栈专题)
单调栈1.导论2.编程题2.1 739. 每日温度2.2 496. 下一个更大元素 I2.3 503. 下一个更大元素 II2.4 42. 接雨水2.5 84. 柱状图中最大的矩形1.导论什么是单调栈?就是栈里的元素保持升序或则降序。什么时候用单调栈通常是一位数组,要寻找任一个元素的右边或则左边第一个比自己大或则小的元素的位置,此时我们就要想到可以用单调栈了。使用单边栈主要有三个判断条件当前元素小于栈顶元素当前元素等于栈顶元素当前元素大于栈顶元素2.编程题2.1原创 2021-12-08 17:02:45 · 578 阅读 · 0 评论 -
leetcode(动态规划专题)
动态规划1.导论2.基础题目2.1 509. 斐波那契数2.2 70. 爬楼梯2.3 746. 使用最小花费爬楼梯2.4 62. 不同路径2.5 63. 不同路径 II2.6 343. 整数拆分2.7 96. 不同的二叉搜索树3.背包问题3.1 416. 分割等和子集1.导论动态规划解题步骤:1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序优化:滚动数组背包问题01背包:每个物品的数量只有一个,不选,选。先遍历背包或物品都可以原创 2021-12-07 16:37:28 · 934 阅读 · 0 评论 -
leetcode(贪心算法专题)
贪心算法1.导论2.编程题2.1 455. 分发饼干1.导论贪心的本质是选择每一阶段的局部最优,从而达到全局最优。一般解题步骤将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解2.编程题2.1 455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j]原创 2021-12-01 11:28:43 · 1181 阅读 · 0 评论 -
leetcode(回溯算法专题)
回溯算法1.导论2.编程题2.1 77. 组合2.2 216. 组合总和 III2.3 17. 电话号码的字母组合2.4 39. 组合总和2.5 40. 组合总和 II1.导论递归中隐藏着回溯回溯算法的本质是穷举回溯优化:剪枝回溯法解决问题:组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等回溯法解决的问题可以抽象原创 2021-11-29 15:49:46 · 906 阅读 · 0 评论 -
leetcode(二叉树专题)
二叉树1.导论2.编程题2.1 144.二叉树的前序遍历2.2 94.二叉树的中序遍历2.3 145.二叉树的后序遍历2.4 102. 二叉树的层序遍历2.5 107. 二叉树的层序遍历 II2.6 199. 二叉树的右视图2.7 637.二叉树的层平均值2.8 429.N叉树的层序遍历2.9 515.在每个树行中找最大值2.10 116. 填充每个节点的下一个右侧节点指针2.11 117. 填充每个节点的下一个右侧节点指针 II2.12 104. 二叉树的最大深度2.13 111. 二叉树的最小深度1.原创 2021-11-17 14:49:53 · 685 阅读 · 0 评论 -
leetcode(栈与队列专题)
栈与队列1.导论2.编程题2.1 232.用栈实现队列2.2 225.用队列实现栈2.3 20.有效的括号2.4 1047.删除字符串中的所有相邻重复项2.5 150. 逆波兰表达式求值2.6 239.滑动窗口最大值2.7 347.前K个高频元素1.导论队列是先进先出栈是先进后出掌握优先队列(默认小顶堆),比较器的重写2.编程题2.1 232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue原创 2021-11-15 16:37:56 · 953 阅读 · 0 评论 -
leetcode(字符串专题)
字符串1.导论2.编程题2.1 344.反转字符串2.2 541.反转字符串II2.3 剑指offer05.替换空格2.4 151.反转字符串里的单词2.5 58-Ⅰ.翻转单词顺序2.6 58-II.左旋转字符串2.7 28.实现strStr()1.导论1.求字符串的长度记得length()后面的括号。2.Strigbuilder和StringBuffer常用方法要掌握。3.字符串到字符数组的转换4.字符的大小写判断5.KMP算法求前缀表(本身就是一个字符串匹配过程,记录的是前后缀相同的原创 2021-11-13 18:16:21 · 561 阅读 · 0 评论 -
leetcode(哈希表专题)
哈希表1.导论2.编程题2.1 242.有效的字母异位词2.2 1002.查找共用字符2.3 349.两个数组的交集2.4 202.快乐数2.5 1.两数之和2.6 350.两个数组的交集II2.7 454.四数相加II2.8 383.赎金信1.导论哈希表是根据关键码的值而直接进行访问的数据结构。哈希表用的是数组支持按照下标随机访问数据的特性 ,所以哈希表其实就是数组的一种扩展,由数组演化而来一般哈希表用来快速判断一个元素是否出现在集合中使用哈希法来解决问题时,常用到的三种数据结构原创 2021-11-12 18:02:58 · 462 阅读 · 0 评论 -
leetcode(链表专题)
链表1.导论2.编程题2.1 203.移除链表元素1.导论链表分类:单链表、双向链表、循环链表链表考查点:链表的增删改查虚拟头结点链表反转链表相交是否有环2.编程题2.1 203.移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。列表中的节点数目在范围 [0, 104] 内1 <= Node.val <= 500 <= val <= 50/**原创 2021-11-12 16:00:04 · 801 阅读 · 0 评论 -
leetcode(数组专题)
数组1.二分查找1.1 导论1.2 704.二分查找1.3 35.搜索插入位置1.4 34.在排序数组中查找元素的第一个和最后一个位置1.5 69.x的平方根1.6 367.有效的完全平方数2.双指针2.1 27.移除元素2.2 26.删除有序数组中的重复项2.3 283.移动零2.4 844.比较含退格的字符串2.5 977.有序数组的平方1.二分查找1.1 导论注意区间:左闭右闭区间:[left,right] —>即可以取到left == right 所以循环写成while(原创 2021-11-11 11:32:57 · 5324 阅读 · 0 评论 -
java面经整理
1.jdk1.7到jdk1.8HashMap发生了什么变化(底层)?1.1.7中底层是数组+链表,1.8中底层是数组+链表+红黑树(数组的默认初始容量是16、扩容因子为0.75,每次采用2倍的扩容。也就是说,每当我们数组中的存储容量达到75%的时候,就需要对数组容量进行2倍的扩容。链表长度大于等于8时会树化,小于6时进行链化。),加入红黑树的目的是提高HashMap插入和查询整体效率。2.1.7中链表插入使用的是头插法,1.8中链表插入使用的是尾插法,因为1.8中插入key和value时需要判断链表元素原创 2021-11-08 14:24:40 · 3427 阅读 · 3 评论 -
Java基础问题整理
问题来源:牛客网自己整理一遍加深印象1.什么是java虚拟机?为什么java被称作是平台无关的编程语言?什么是java虚拟机?Java虚拟机是一台执行java字节码文件的虚拟计算机,它拥有独立的运行机制,其运行的java字节码也未必由java语言编译而成。想更深入了解java虚拟机可以查看我jvm的笔记:笔记为什么java被称作是平台无关的编程语言?java语言的跨平台性,并不是指java本身跨平台,而是java源码经过编译器编译称字节码文件,字节码文件通过安装在不同平台的java虚拟机(原创 2021-08-15 10:34:03 · 2479 阅读 · 0 评论 -
剑指offer刷题笔记
剑指offer刷题笔记3.数组中的重复的数字4.二位数组中的查找5.替换空格6.从尾到头打印链表3.数组中的重复的数字在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。2 <= n <= 100000方法一:暴力解法class Solution { public int findRepeatNumber(int[] nums) {原创 2021-10-22 16:01:22 · 578 阅读 · 0 评论 -
JUC(多线程)笔记
JUC1.JUC概述1.1 JUC简介1.2 进程与线程1.3 线程的状态1.3.1 线程状态枚举类1.3.2 wait/sleep的区别1.4 并行与并发1.4.1 串行模式1.4.2 并行模式1.4.3 并发1.4.4 小结(重点)1.5 管程1.6 用户线程和守护线程1.7 创建线程的方式2.Lock接口2.1 Synchronized2.1.1 Synchronized关键字回顾2.1.2 售票案例2.1.3 多线程编程步骤2.2 什么是Lock2.2.1 Lock接口介绍2.2.2 lock2.2原创 2021-08-12 11:14:06 · 636 阅读 · 0 评论 -
leetcode刷题笔记
leetcode刷题1. 算法1.1 动态规划1.1.1 简单题目1. 算法1.1 动态规划1.1.1 简单题目53.最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。/* 用 f(i)代表以第i个数结尾的「连续子数组的最大和」 动态规划转移方程:f(i)=max{f(i−1)+nums[i],nums[i]} f(i)只和f(i−1)相关,可以只用一个变量pre来维护对于当前f(i)的f(i-1)的值是多少*/class原创 2021-08-12 06:45:08 · 3041 阅读 · 0 评论 -
Java面试题第一季学习笔记
尚硅谷经典Java面试题第一季1.自增变量1.自增变量 public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i * i++; System.out.println("i=" + i); System.out.println("j=" + j); System.out.pr原创 2021-08-08 14:26:04 · 2264 阅读 · 3 评论