自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 问答 (8)
  • 收藏
  • 关注

原创 LeetCode题目类型分类总结(长期更新)

分类目录链表字符串链表2.两数相加字符串6. Z 字形变换

2020-12-22 08:34:41 574

原创 docker报错 Error response from daemon: create ./nginx.conf: “./nginx.conf“ includes invalid characters

在我创建nginx容器的时候,使用了挂载,但是在写途径的时候偷懒只用了一个. ,改成完整途径即可出错命令docker run -p 80:80 --name nginx \-v ./nginx.conf:/etc/nginx/nginx.conf \-v ./conf.d/:/etc/nginx/conf.d/ \-v ./logs/nginx/:/var/log/nginx/ \-v ./html/:/usr/share/nginx/html/ \-d nginx正确使用docker

2022-04-15 22:15:10 4199

原创 koa拿不到formdata数据解决方法

加上koa2-formidable 和koa-bodyparserapp.use(formidable())app.use(bodyparser({ enableTypes: ['json', 'form', 'text'], multipart: true}))

2021-11-19 20:07:40 710 1

原创 qemu-gdb debug

网上搜到的很多关于qemu debug的文章很多,也很详细。我遇到问题是不支持架构(gdb) target remote localhost:26000Remote debugging using localhost:26000warning: Architecture rejected target-supplied descriptionwarning: No executable has been specified and target does not supportdetermini

2021-06-03 16:40:01 1659

原创 Lab 0: networking warmup

这个预热还是挺简单的,主要是体验Telnet。但是在2.3 Listening and connecting 这一节中,我使用的Ubuntu20.04,命令netcat,应该使用nc,而不是netcat

2021-06-02 22:26:21 141

原创 Lab: Xv6 and Unix utilities

pingpongWrite a program that uses UNIX system calls to ‘‘ping-pong’’ a byte between two processes over a pair of pipes, one for each direction.The parent should send a byte to the child;the child should print “: received ping”, where is its process ID

2021-06-02 16:48:25 252

翻译 redis中查看key的过期时间

TTL KEY返回key剩余的的存活时间,在Redis2.6以及之前,返回01表示这个key不存在或者没有关联过期时间2.8开始之后,返回值改变了-2表示不存在,-1表示没有关联过期时间

2021-04-14 10:16:20 4612

原创 416. 分割等和子集

0-1背包问题,在数组中找出和为sum/2的元素。动态规划,那么需要利用之前的计算结果,关键就是这一步。那么就是设计dp数组的难度,dp数组的设计很巧妙dp[i][j]表示在[0,i],和为j是否存在。那么这样就能推导出动态转移方程dp[i][j] = dp[i-1][j] | dp[i-1] [j-nums[i]]但是初始化怎么做,已经计算出target,那么数组中最大的数就只能是targetif (nums[0] < target) { dp[0][nums[.

2021-04-03 11:33:32 91

原创 2^32个int型整数或者说40亿个int数据,只有1GB内存,如何找到重复的数据?

首先要知道int型整可以约等于有232个数字,1GB = 233bit如果用int型数字来存储每个数字的个数,那么极端情况下,最大需要32*232,也就是237bit空间,也就是16GB,内存大大超过预期。那么就以极端情况下为例,最多能用来计数的空间是多少呢?2个bit——00,01,10,11。那么就可以用00,01,10分别表示0次,1次,大于1次。所以现在就能利用1GB的内存,找到2^32个int型整数,但是有一个前提,至少有一个重复的数据。其实利用这种方法内存根本就不够,原因如下:第一,

2021-03-13 01:04:52 1123

原创 Java中接口多继承问题

在jdk1.8中,接口可以实现多继承,但是这样会不会引起菱形问题?肯定回答,但是现在的编译器很智能,会要求程序员重写方法。假如现在C接口继承接口A和接口B,A、B中都有test方法,并且至少有一个接口实现了这个方法,那么编译器会要求你重写相应的方法。...

2021-03-12 22:39:14 305

转载 在mac上不通过brew安装nginx

Install Nginx on Mac OS from sourceno Homebrew requiredDownload Nginx$ cd /usr/local/src$ curl -OL http://nginx.org/download/nginx-1.12.2.tar.gz$ tar -xvzf nginx-1.12.2.tar.gz && rm nginx-1.12.2.tar.gzDownload the PCRE libraryThe PCRE li

2021-03-03 22:19:27 1788 1

原创 279.完全平方数

这道题肯定是用动态规划,动态方程如何找?两个for循环这个好像在之前没有遇到过,其实对于题目的意思可以思考出,要找个数最小,那么就需要最小的非完全平方数加上一个最大的完全平方数,然后再区寻找这个最小的非完全平方数的个数。这是其一,其二,由于个数不确定,并且要求个数最少的,那么是必须要枚举class Solution { public int numSquares(int n) { int[] dp = new int[n + 1]; for (int i = 1.

2021-02-21 11:26:04 76

原创 239. 滑动窗口最大值

这道题一开始的思路便是动态规划,但是有一个问题,那就是如何利用前一个dp结果,不知道,前一个叫结果必定是k长度的结果,所以这个不能用动态规划。然后看了下讨论区,使用双向队列。双向队列,head处维持当前最大值,尾部加入的元素一定维持是最大的。class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int len = nums.length; Deque<Integer>.

2021-02-21 11:17:07 72

原创 240. 搜索二维矩阵 II

这道题一开始的不明白题意,看完解答才知道这题要干什么=_= , 就是在矩阵中找target,最简单的方法是暴力破解。第二种方法,是从左下角或者左上角开始寻找,减枝class Solution { public boolean searchMatrix(int[][] matrix, int target) { int m = matrix.length, n = matrix[0].length; int i = 0, j = n - 1; .

2021-02-20 09:19:44 79

原创 448. 找到所有数组中消失的数字

思路和41题一样,直接将原数组的角标作为数的值,然后将出现的变成负数。class Solution { public List<Integer> findDisappearedNumbers(int[] nums) { for (int i = 0; i < nums.length; i++) { int tmp = Math.abs(nums[i]); if (nums[tmp - 1] > 0) .

2021-02-20 09:19:13 82

原创 剑指 Offer 14- I. 剪绳子

这道题的第一个想法便是动态规划,但是在找动态方程的时候有点问题,觉得是j*dp[i-j]这样,但是漏了一点——j*(i-j),并且还要从1~i-1这中间找class Solution { public int cuttingRope(int n) { int[] nums = new int[n+1]; nums[1] = 0; for(int i = 2; i <= n; i++){ int max = 0; .

2021-02-19 23:54:14 73

原创 剑指 Offer 31. 栈的压入、弹出序列

二刷,第一反应就是使用另外的数据结构来模拟。解决方法和我想的是一样的,只不过我想的是LinkedList,其它人用的是Stack。我的思路就是反方向的pushed,并且正方向的从popped中找。另外的思路其实更简单,那就是一直pushed,然后碰到和popped中的一样,那么class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Stack<Integer.

2021-02-19 23:48:30 117

原创 剑指 Offer 42. 连续子数组的最大和

第一反应是动态规划,但是这种线性的动态规划,还是有点找不到动态转移方程线性动态方程其实是很好做的,不要管什么优化解法,直接new一个dp数组,然后确定dp数组的每一个单位表示什么。从这个题来分析,我当前dp[i]想要用到dp[i-1],那么dp[i]自然就想到的是前i-1个(一定要包括i-1)最大的和是多少。接着就出来了动态方程dp[i] = Max(dp[i-1] + nums[i], nums[i])代码就写出来了class Solution { public int maxSubAr.

2021-02-19 23:47:49 87

原创 4. 寻找两个正序数组的中位数

想到的第一种方法就是插入排序,设置一个copy数组,然后将排序好的数字放进去。然后可以优化,直接到length/2的时候就能退出,并且可以节约空间class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int length1 = nums1.length; int length2 = nums2.length; int length = l.

2021-02-19 23:47:13 90

原创 String str=“a“与 String str=new String(“a“)一样吗?

我不保证我的完全正确,但我保证我的这篇文章不是抄的。首先我通过我自己的实验,我认为i的值是放在constant pool中。我来说原因,看下面代码/*jdk1.8版本*/public class s { public void test() { String d = "a"; }}通过Javap 反编译之后结果根据《深入理解Java虚拟机》的2.4.3方法区和运行时常量池溢出 从jdk1.7开始,constant pool被合并到元空间,并且元空间移到堆中

2021-02-08 16:02:57 403 1

原创 114. 二叉树展开为链表

一开始想就是想着优化思想,结果官方解答用的就是暴力解法。然后看了其它的解答,发现思路其实很简单,通过不断的将右子树的结构挪到左子树的最右边的位置。class Solution { public void flatten(TreeNode root) { while (root != null) { if (root.left == null) { root = root.right; } else .

2021-01-20 23:08:26 74

原创 207. 课程表

这道题一开始没思路,但是感觉要使用dfs。看完解答之后,发现这是一个有向图问题,这类问题没有做过,这里记录一下。如何用dfs来实现这个。看一看示例2,可以发现,找到一个环,那就输出false,第二,明白在每一个课寻找完毕之后, 那么这些课就不会产生环;因为任何和环有关的节点一定会在第一时间找到。如何记录就直接用一个flag数组,1表示走过,-1表示没有环public boolean canFinish(int numCourses, int[][] prerequisites) { .

2021-01-20 23:07:32 68

原创 Hashmap中扩容过程源码详解1

话不多说直接上代码,全在代码里面,只不过不设计红黑树,红黑树放在下一部分写final HashMap.Node<K,V>[] resize() { //新建一个Node,指向旧table HashMap.Node<K,V>[] oldTab = table; //oldCap暂且叫它旧容量吧,如果oldTab是null,那么直赋0,否则就是之前的容量-->也就是table的长度 int oldCap = (old

2020-11-20 16:34:44 283

原创 类加载和类的实例化

首先举个例子public class Test { public static void main(String[] args) { Son son = new Son(); Son son1 = new Son(); System.out.println("end"); }}Son类中的构造器大家就随便写。很好奇为什么我会写这样一份代码。在第三行和第四行分别打上断点,然后在idea中使用force step into,看看在两个ne

2020-11-18 21:30:09 241

原创 ArrayList源码步步分析

首先从集合底层实现说起 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; /** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList is the length of this

2020-11-14 20:48:57 117

原创 JVM 中一次完整的 GC 流程是什么样子的,对象如何晋升到老年代,

一次完整的gc过程gc的通过垃圾收集器来实现的,现代垃圾收集器大部分都是基于分代收集理论设计的,也就是将对象划分为新生代,老年代。其中新生代分为Eden区和两块Survivor区,比例为8:1:1。每次分配内存都只会使用Eden区和一块Survivor区,对象默认是放在Eden区,但是如果对象太大了,Eden区放不下,那么就会放入到老年代中,当发生gc时,就会把存活对象放到另一块Survivor上,如果这块survivor区不够,那么依赖老年代进行担保,假设这块为s0区,另一块是s1区。下一次Eden区

2020-11-14 11:27:21 22938

原创 215. 数组中的第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array著作权归领扣网络所有。商业转载请联系官方授.

2020-11-06 15:44:14 111

原创 316. 去除重复字母

给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同示例 1:输入:s = “bcabc”输出:“abc”示例 2:输入:s = “cbacdcbc”输出:“acdb”提示:1 <= s.length <= 10.

2020-11-01 10:57:45 364 2

原创 Floyd判圈算法

求环的起点假设环长为Lfast = a + b + f * L (f 为fast指针走过的圈数)slow = a + b + s * L----> fast - slow = (f - s) * L∵ fast = 2 * slow∴ slow = fast - slow = (f - s) * L = a + b + s * L∴ a + b一定是L的整数倍假设此时slow回到起点,fast从相遇点出发。那么这两个这时候的距离差就是L的整数倍,最后fast走过c段距离后,slow走

2020-10-30 19:41:03 126

原创 82. 删除排序链表中的重复元素 II

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-so.

2020-10-29 20:05:34 110

原创 445. 两数相加 II

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7来源:力扣(LeetCode)链接:https://leet.

2020-10-29 11:54:14 111

原创 92. 反转链表 II

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处.

2020-10-28 19:24:23 86

原创 203. 移除链表元素

删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5这道题和剑指offer第18题类似,但是比剑指offer题目要难一点,多一个的难点就是删除的元素可能存在多个,那么就不能再删除之后立马break,并且在一开始左剑指offer 18题的时候,有个地方没有完善,导致之后直接挪到203题的时候,就不能得出正确结果。那就是在找到一个目标节点之后,还执.

2020-10-27 13:59:11 181

原创 剑指 Offer 18. 删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该.

2020-10-27 13:32:17 49

原创 206. 反转链表

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。这道题是第三遍做了,还是没有思路=-=。原因就.

2020-10-27 11:33:17 71

原创 108. 将有序数组转换为二叉搜索树

这道题要明白一点的就是,构造高度平衡二叉树,也就间接的说要以数组中心元素为root节点,然后依次在左右儿子中添加节点。明白这一点之后,还需要一点就是,框定左树和右树的节点范围,用两个指针就行了。class Solution { public TreeNode sortedArrayToBST(int[] nums) { return BST(nums, 0, nums.length - 1); } public TreeNode BST(int[] nums, i.

2020-10-26 17:01:58 62

原创 669. 修剪二叉搜索树

这道题逻辑上要明白一点,那就是如果某个节点的值小于low,可以直接把该节点和左儿子抹掉;如果大于high,直接抹掉该root节点。下面是我自己写的代码,思路很清晰,但是不够简洁class Solution { int low = 0; int high = 0; public TreeNode trimBST(TreeNode root, int low, int high) { this.low = low; this.high = high.

2020-10-26 15:47:31 87

原创 450. 删除二叉搜索树中的节点

思考问题的时候一定要跳出之前的思维圈,一旦出错,就会一直困在里面!!!!删除二叉搜索树,在学数据结构的时候用C语言手敲了一遍。现在用Java来实现,发现毫无头绪!!!于是又在回忆之前的思路,结果越想越乱。然后完全抛弃之前的想法,开始独立思考。随便指定实例中的一个节点的时候,就发现了三种情况,俺就是这个节点可能含有左右儿子中的一个,或者两个都有,或者根本就没有儿子节点。那么对于不同的情况就要有不同的应对方式。对于树的形状的改变,有两种方法。第一种方法是,直接将有儿子替换当前节点,然后将当前节点的左儿.

2020-10-23 12:06:39 71

原创 543. 二叉树的直径

遇到二叉树遍历,那就是以前的老规矩,遍历只分两种——DFS和BFS,而DFS的遍历顺序要视情况而定。像这道题,要找最长路径,那么转换一下思路——两点确定一条直线,也就是要找连着最多的节点的路径。那么把三种遍历顺序放进去看,就能推出这要使用后序遍历。那么打出框架class Solution { public int diameterOfBinaryTree(TreeNode root) { dfs(root); } public int dfs(TreeNode r.

2020-10-19 21:29:00 111

原创 124. 二叉树中的最大路径和

树的遍历一定要用最特殊的情况来推导遍历方式。首先这道题要返回最大路径和,实例1已经很明显了的提示用后序遍历了。而且遍历一定要以最后的节点来作推导,不要用中间的节点来做推导。既然确定了用后序遍历,剩下的就只剩用在后序遍历代码中去添加相应的条件了。class Solution { public int maxPathSum(TreeNode root) { PathFind(root) } public int PathFind(TreeNode root.

2020-10-18 09:02:08 176

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除