自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 收藏
  • 关注

原创 //keep

keep on

2022-08-08 19:31:22 220 1

原创 leetcode 120. 三角形最小路径和

动态规划问题。dp数组,方程为dp[j][i] = Math.min(dp[j+1][i],dp[j+1][i+1]) + 当前value值。java代码如下

2022-06-10 20:20:53 200

原创 MySQL索引定位数据过程

MySQL主要有MyIsam和InnoDB引擎,它们通过索引定位数据的过程是不一样的。首先说下MyIsam和InnoDB的常见区别1、事务InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一。2、外键InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败。3、索引InnoDB 是聚集(聚簇)索引,MyISAM 是非聚集(非聚簇)索引。4、锁

2022-05-07 11:21:32 1057

原创 leetcode 24. 两两交换链表中的节点

1、如果整个链表数量是偶数个,两两交换,第二个节点指向第一个节点,第二个节点后面的节点也需要保存,不然就断联系了,所以得保存3个节点,1 2 3,1 和 2 交换位置后,1得指向3,但是3也需要后3后面的那个4交换位置,所以1实际要指向4,可以发现,两两交换后,下一个要指向的元素就是下一个交换后的头节点,是一个递归的操作。1 2 3 4,1 2变成2 1后,1的next要变成下一次交换后的头节点,3 4 交换后就是4 3,所以1.next = 4,整体变成了2 1 4 3 ,3.next = 下一轮交换..

2022-05-04 21:11:28 696

原创 leetcode 面试题 17.13. 恢复空格

1、动态规划。dp[i]表示以当前位置结束,能识别的最大字符数。dp[sentence]有了,相减就得了2、dp[i]怎么求?以i结尾作为字符串截取匹配字典中每一个单词,然后取最大的那个。比如此时i来到的了string,字典中有["ng","ing"],遍历字典,dp[i] = Math.max(dp[i],dp[i - word.length()] + word.length())。for(String str : 字典集合)。如果无法匹配出str就进入下一个字段元素匹配,continue。第一个..

2022-05-03 23:07:39 212

原创 LRU算法具体代码实现-java

package com.example.demo; import java.util.HashMap;import java.util.Map; public class LRUCache { Entry head, tail; int capacity; int size; Map<Integer, Entry> cache; public LRUCache(int capacity) { this.capacity .

2022-05-02 15:01:58 818

原创 leetcode33. 搜索旋转排序数组

1、数组而且有有序的特征,所以尽可能往二分法上面想。2、二分法的话,获取到中点后,检查中点是否为目标值,如果是直接返回3、left 和mid 组成的区域是不是一个完整的有序区域比如123就是,4123就不是4、如果left和mid组成的区域是完整有序的,那么就在检查目标值是不是在这个有序区间的,如果是那么缩小检索范围,right = mid - 1。反之目标值就是在另外一边 left = mid + 1;然后继续二分5、如果条件4不满足,说明left和mid组成的不是完整有序的,此时可以..

2022-05-02 14:29:37 311

原创 leetcode34. 在排序数组中查找元素的第一个和最后一个位置

1、使用二分查找。先找出出现第一次的位置,然后找出最后一次出现的位置。2、第一次如果没有找到,说明数字中压根就没有这个数,直接返回。3、第二次找的时候,直接检查右边界是不是,如果是就直接返回,不是的话就继续二分,二分到最后的时候会发现只剩两个元素或者剩一个元素。此时就可以来判断结果了。剩最后一个结果的时候肯定就是left == right了已经退出循环了,返回right即可。剩两个的时候会一直循坏,此时返回left即可。class Solution { public int[] ..

2022-04-28 15:41:46 530

原创 leetcode179.组合最大数

1、自定义排序规则。两个相加,大的放前面。PriorityQueue<String> queue = new PriorityQueue<String>((a,b)->((b+a).compareTo(a+b)));//如果是(a+b).compareTo(b+a),就是相加的值小的排在前面。2、放入一个优先级队列里。3、取出组装。因为最大数可能溢出。用字符串来表示合理一点。为00的时候处理一下。class Solution { p..

2022-04-28 12:34:56 200

原创 HashMap源码阅读笔记

常量//缺省table大小 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16//table最大长度 static final int MAXIMUM_CAPACITY = 1 << 30;//缺省负载因子大小 static final float DEFAULT_LOAD_FACTOR = 0.75f;//树化阈值static final int TREEIFY_THRESHO

2022-04-25 19:06:43 173

原创 leetcode11. 盛最多水的容器

双指针。因为最大值肯定是在其中的,从两边慢慢的检查并且记录最大值。移动短板,因为不管是短板移动还是长版移动,整个装水的矩形长度肯定是要减一的,并且这个矩形的面积是由短板那边决定的,如果移动长版,长度减一,但是短板那边不变,整个面积最大值肯定是减小了,而移动短板,长版那边不变,虽然长度减一了,但是可能短板变成了更高的一个短板了,整个面积就有可能变大。class Solution { public int maxArea(int[] height) { int left = 0..

2022-04-25 16:58:26 117

原创 leetcode 2. 两数相加

注意进位信息即可。结束条件。如果最后还有n的时候,一定要补充节点。然后就算遍历到的节点为null,此时对应的数应该为0。class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { //进位信息 int n = 0; //遍历到的list1节点的值 int num1; //遍历到的li..

2022-04-25 15:37:21 106

原创 leetcode239. 滑动窗口最大值

class Solution { public int[] maxSlidingWindow(int[] nums, int k) { List<Integer> res = new ArrayList(); LinkedList<Integer> queue = new LinkedList(); for(int i = 0; i < nums.length; i++){ ...

2022-04-17 00:50:14 309

原创 leetcode79. 单词搜索

回溯class Solution { int[][] visited; public boolean exist(char[][] board, String word) { int col = board[0].length; int row = board.length; visited = new int[row][col]; for(int i = 0;..

2022-04-17 00:06:29 293

原创 ReentrantLock实现交替打印abc。(await&signal)

package ao.com;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;//await和signal。ReentrantLock实现交替打印。public class Test03 { public static void main(String[] args) throws InterruptedException { Awai.

2022-04-12 17:10:58 560

原创 多线程之按顺序输出和交替输出(wait和notify实现)

顺序输出模型:package ao.com;//2比1先输出public class Test01 { //锁对象 private static Object lock = new Object(); //先输出完了的标志。 private static boolean t2Runned = false; public static void main(String[] args) { Thread t1 = new Thread(()-&

2022-04-12 16:40:12 792

原创 leetcode138. 复制带随机指针的链表

复制节点(有点赖皮 .......(/狗头))/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null; this.random = null; }}*/class Solution { pu..

2022-04-11 22:18:29 450

原创 leetcode113. 路径总和 II

经典回溯。一招尝遍天下鲜/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, Tr...

2022-04-11 21:59:34 153

原创 剑指 Offer 33. 二叉搜索树的后序遍历序列

首先,根节点肯定是在最后一个的,从第一个开始遍历的话,先是小于根节点的,然后又遇见大于根节点的,当这两个过程遍历完(小于了又大于)所到达的终点索引肯定是最后一个了(小于部分就是根节点的左子树,大于部分就是根节点的又子树,递归即可),需要两个指针,一个开始位置,一个结束位置。class Solution { public boolean verifyPostorder(int[] postorder) { return process(posto...

2022-04-11 21:25:37 303

原创 常用的设计模式详解。

一、创建型模式的设计模式工厂模式、单例模式二、结构型模式适配器模式。代理模式三、行为型模式观察者模式。工厂模式它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。何时使用:我们明确地计划不同条件下创建不同的实例时。实际使用场景:创建线程池的

2022-04-10 14:28:59 449

原创 逻辑运算符和位运算符

逻辑运算符六个运算符:&与(And)、|或(Or)、!非(Not)、^异或、&&短路与、||短路或1.&运算规则:true&true=true true&false=false false&true=false false&false=false见false为false。2.|运算规则:true|true=true true|false=true false|true=true false|false=false见true为t

2022-04-10 10:21:52 4292

原创 leetcode23. 合并K个升序链表

/** * 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; } *...

2022-04-08 17:41:17 602

原创 微服务相关知识复习(spring cloud 、spring cloud alibaba)

Eureka服务注册与发现多个提供者(相同服务名)注册到Eureka后,消费方需要开启负载均衡,就是在RestTemplate配置类上面加一个@LoadBalanced。Eureka、ribbon(负载均衡服务调用)、openFeign(服务调用接口)、Hystrix(熔断、降级,监控hystrixDashboard需要搭建一个监控module)、gateway(服务网关)、spring cloud config(分布式配置中心)、springclou...

2022-04-07 22:09:21 259

原创 剑指 Offer 57. 和为s的两个数字/和为s的连续正数序列

双指针class Solution { public int[] twoSum(int[] nums, int target) { int left = 0; int right = nums.length -1; int sum = 0; while(left != right){ sum = nums[left] + nums[right]; ...

2022-04-05 16:16:30 289

原创 剑指 Offer II 022. 链表中环的入口节点

/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode detectCycle(ListNod...

2022-04-05 11:48:09 594

原创 leetcode83/82. 删除排序链表中的重复元素(保留或者全删除)

1)每次重复的只要一次。如果遇见相对了的直接跳过,跳到不等的地方。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { t

2022-04-04 14:02:31 360

原创 剑指 Offer 41. 数据流中的中位数

中间的那个数比排序后的左边的大,比右边的小。创建一个大顶堆和小顶堆。每次加数的时候,大顶堆加一次,小顶堆加一次。中位数就是堆顶的情况。画图举例走一次就会了。class MedianFinder { int count = 0; PriorityQueue<Integer> minHeap = new PriorityQueue(); PriorityQueue<Integer> maxHeap = new PriorityQueue(new C...

2022-04-04 12:45:02 110

原创 剑指 Offer 59 - I. 滑动窗口的最大值

双端队列来做。维持大小顺序,然后每次要取值的时候看维持的头节点是否过期,过期了就需要弹出。class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(k == 0 || nums == null){ return new int[]{}; } int[] res = new int[nums.length - k + 1]; ...

2022-04-04 10:41:36 267

原创 剑指 Offer 12. 矩阵中的路径

暴力回溯:class Solution { public boolean exist(char[][] board, String word) { int row = board[0].length; int col = board.length; int[][] visited = new int[col][row]; char[] words = word.toCharArray(); for(in...

2022-04-03 14:47:05 292

原创 剑指 Offer 34. 二叉树中和为某一值的路径

回溯法即可。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode ..

2022-04-03 12:54:22 670

原创 JVM垃圾回收机制(收集器、收集算法、卡表)

目录JVM垃圾回收机制HotSpot垃圾分代回收算法HotSpot经典垃圾收集器CMSG1跨代引用、卡表、写屏障各种收集器对比在java开发中,我们不需要过度的关注对象的回收和释放。因为JVM的垃圾回收机制可以帮助我们自动对内存中已经死亡或者长时间没有使用的对象进行清楚和回收来实现内存空间的有效利用,但是完全交由JVM来回收对象,那么就会增加回收性能的不确定性,所以面对特定业务场景就需要人为介入来实现垃圾回收的调优。比如说对内存要求苛刻的...

2022-04-02 14:05:53 4755

原创 剑指 Offer 29. 顺时针打印矩阵

class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix.length == 0){ return new int[]{}; } int c0 = 0; int c1 = matrix[0].length-1; int r0 = 0; int r1 = ma...

2022-04-01 19:08:39 305

原创 剑指 Offer 27. 二叉树的镜像

递归一下就行。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode mirrorTree(TreeNode root) { ..

2022-04-01 17:38:01 499

原创 剑指 Offer 26. 树的子结构

1)先在A中找到B的根节点,上图中就是要先找到在A中找到4。如果找根节点过程中没有找到就返回false。2)找到根节点的值相同的时候,判断他俩的孩子是否相对。使用另外的函数,因为要判空,孩子的判空,如果为空是有意义的,而根节点的判空就是没有找到,直接返回false,而孩子的判空,例如A的孩子为空B的孩子也为空,为空的时候,其实就该返回true了。所以得用两个函数。/** * Definition for a binary tree node. * public class TreeNode..

2022-04-01 16:57:57 239

原创 leetcode 39. 组合总和

回溯算法。class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res = new ArrayList(); Stack<Integer> path = new Stack(); int pat..

2022-04-01 13:19:40 251

原创 剑指 Offer 22. 链表中倒数第k个节点

两个指针,快的先走k个,然后一起走到头,看slow位置。画画就会了。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode getKthFromEnd(ListNode head...

2022-03-31 22:29:55 339

原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

1)如果不要求相对次序,也就是不要求稳定性的话,直接用双指针,时间O(n)。class Solution { public int[] exchange(int[] nums) { int i = 0, j = nums.length - 1, tmp; while(i < j) { while(i < j && (nums[i] & 1) == 1) i++; whil...

2022-03-31 22:06:22 293

原创 剑指 Offer 15. 二进制中1的个数

public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int res = 0; for(int i = 1; i <= 32 ; i++){ if((n&1) == 1){ res++; ...

2022-03-31 21:42:24 95

原创 leetcode 154. 寻找旋转排序数组中的最小值 II

因为是有序的,先往二分法方向思路一下,比对mid和左右两边的关系。具体画个图就明白了,如果有重复元素,无外乎就是左边left和右边righj相等,此时把右指针左移一个对结果没有任何影响。...

2022-03-31 19:25:52 147

原创 剑指 Offer 07. 重建二叉树

用hashMap保存中序遍历的值与下标的对应关系。用前序遍历的第一个元素可以在中序遍历中找到左子树个数,利用下标的关系进行递归建树即可。用hashmap定位中序遍历中根节点的下标,根节点的前面就是左子树的数量。然后用左子树的数量到前序遍历中去就可以找到根的左子树范围,然后递归。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ..

2022-03-31 19:02:17 60

空空如也

空空如也

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

TA关注的人

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