- 博客(64)
- 收藏
- 关注
原创 解决Swagger2中“message“: “Failed to convert value of type ‘java.lang.String’ to required type ‘java.lan
RESTFUL风格的,必须不能只有一个{id},必须要加上前缀abc/{id}
2022-08-28 19:42:50
389
原创 nacos 优先级问题
比如建立在service.yml的自动加载的同名配置文件,优先级是最高的,也就是说如果出现冲突的配置以他为准,然后才是扩展配置,然后是通用配置.Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。实际上可以这么理解:先加载通用配置,再加载扩展配置(ext-config),最后再加载自己的配置....
2022-08-28 00:46:17
655
原创 JUC-CAS的底层原理与ABA问题的解决
CAS的英文为Compare and Swap 翻译为比较并交换。CAS加volatile关键字是实现并发包的基石。没有CAS就不会有并发包,synchronized是一种独占锁、悲观锁,java.util.concurrent中借助了CAS指令实现了一种区别于synchronized的一种乐观锁。使用方法:AtomicInteger a = new AtomicInteger(1);a.getAndIncrement();我们进入getAndIncrement方法: public fi
2022-03-25 01:26:28
249
原创 JZ26 树的子结构
思路还是很简单的:写个递归。先写检查以root1和root2为根结点的两棵树是否一致的方法: public boolean function(TreeNode root1,TreeNode root2){ if(root2==null) return true;//root2已经结束了 if(root1==null) return false; //root1结束但是root2没有结束 if(r.
2022-02-13 19:28:19
243
原创 JZ12 矩阵中的路径
这道题的思路很简单,主要是如何设计递归。我们看到他是从矩形中的一个点开始往他的上下左右四个方向查找,这个点可以是矩形中的任何一个点,所以代码的大致轮廓我们应该能写出来,就是遍历矩形所有的点,然后从这个点开始往他的4个方向走,因为是二维数组,所以有两个for循环,代码如下: public boolean hasPath (char[][] matrix, String word) { char[] words = word.toCharArray(); for (i.
2022-02-13 01:26:04
450
原创 JZ7 重建二叉树
import java.util.*;/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode reConstructBinaryTree(in.
2022-02-12 03:21:20
111
原创 剑指 Offer II 069. 山峰数组的顶部
class Solution { public int peakIndexInMountainArray(int[] arr) { //二分查找试试,修改边界的条件要变动一下 int l = 1; int r = arr.length-2; while(l<=r){ int mid = (r+l)/2; if(arr[mid]>arr[mid-1]) l=mid+1; .
2022-02-10 02:25:07
297
原创 剑指 Offer II 068. 查找插入位置
复健~典型二分查找,详细注释见代码class Solution { public int searchInsert(int[] nums, int target) { int i = 0; int j = nums.length-1; while(i<=j){ int mid = i+(j-i)/2; //每次都造一个新的mid出来 if(nums[mid] == ta.
2022-02-10 01:37:32
215
原创 剑指 Offer II 062. 实现前缀树
手动实现前缀树class Trie { private Trie[] children; boolean isEnd; /** Initialize your data structure here. */ public Trie() { children = new Trie[26]; isEnd = false; //children是一个26长度的数组 //如果有后续,就把新的结点放到数组里。 .
2022-01-18 00:00:31
279
原创 剑指 Offer II 061. 和最小的 k 个数对
利用一个大根堆,每次将一个list加入大根堆中,大根堆的size超过k时删除堆顶的元素。主要是讲究大根堆的比较器。class Solution { public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) { PriorityQueue<List<Integer>> heap = new PriorityQueue<>( .
2022-01-14 22:46:02
149
原创 剑指 Offer II 059. 数据流的第 K 大数值——优先队列
PriorityQueue类在Java1.5中引入。PriorityQueue是基于优先堆的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的Comparator(比较器)在队列实例化的时排序。要求使用Java Comparable和Comparator接口给对象排序,并且在排序时会按照优先级处理其中的元素。比如我们往队列里面插入132,插入2的时候,就会在内部调整为123(默认顺序是升序)。正是由于这个优良特性可以帮助我们实现一系列问题。我们先看一个例子,体会一下他的优点,然后再看一下为.
2022-01-13 20:32:48
320
原创 剑指 Offer II 055. 二叉搜索树迭代器
/** * 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 right) {..
2022-01-08 14:36:40
191
原创 剑指 Offer II 054. 所有大于等于节点的值之和
太简单了以至于不知道应该写什么。class Solution { //以右中左的形式遍历……? private int tmp; public TreeNode convertBST(TreeNode root) { tmp = 0; order(root); return root; } public void order(TreeNode root){ if(root==null) retur..
2022-01-04 22:14:06
165
原创 剑指 Offer II 053. 二叉搜索树中的中序后继
也可以存放,我用标记做的。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { private TreeNode res; private int flag = .
2022-01-04 22:06:30
159
原创 剑指 Offer II 052. 展平二叉搜索树
/** * 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 right) { .
2022-01-04 21:56:34
181
原创 剑指 Offer II 051. 节点之和最大的路径
思路如下:一个递归,每个节点需要左右子树返回各自的最大贡献值,注意这个最大贡献值是左右子树各自的根结点+该子树的左右子树中更大的那一个没理解?行吧,比如上图的例子,我们假设1这个节点要进入递归,那么1节点返回的值,就是1+3=4,而不是1+2=3。但是注意,返回的最大贡献值和题目所求的最大值没关系,题目所求的最大值应当有一个全局变量,在每次递归中,访问的根结点与左右子树各自最大贡献值之和才是最大值。还是不懂?好吧如图所示,对于-10而言,它能得到的最大值就是左子树的最大贡献值9+右子树的最大贡献.
2022-01-04 21:05:04
173
原创 剑指 Offer II 050. 向下的路径节点之和
这道题是一个将前缀和应用到树结构中的例子,制作一个递归函数,每次递归将一个结点加入到前缀和的hashmap中,计算map中存在几个符合题目要求的点,将这些点计入总数,之后继续向下递归。每个节点计算完毕后,退出递归时要记得将该节点的map更新。class Solution { public int pathSum(TreeNode root, int targetSum) { HashMap<Integer,Integer> map = new HashMap<.
2022-01-04 20:29:58
184
原创 剑指 Offer II 047. 二叉树剪枝
可以用递归做,在递归的过程中,下面的枝已经被剪掉了,上面的就可以通过是否为null来判定,return一个true或者false。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val =..
2021-12-21 13:40:04
334
原创 剑指 Offer II 044. 二叉树每层的最大值
总的来说没什么难度,就是一个队列遍历树的方法:插入一个循环,每层都计算队列的size来确定循环次数,每次循环就是一层。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; }.
2021-12-21 10:50:27
321
原创 剑指 Offer II 044. 二叉树每层的最大值
加一个for循环,每层读取队列的size并且循环size的次数。class Solution { public List<Integer> largestValues(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); Queue<TreeNode> q = new LinkedList<>(); TreeNode .
2021-12-21 09:47:42
85
原创 剑指 Offer II 040. 矩阵中最大的矩形
思路是单调栈:从第一行开始扫描,将每一行都认为是一个单调栈求最大直方图面积。比如第二行就是 2 0 2 1 1 第三行是 3 1 3 2 2class Solution { public int maximalRectangle(String[] matrix) { if(matrix.length==0) return 0; int max = 0; int r[] = new int[matrix[0].length()]; .
2021-12-20 22:53:56
136
原创 剑指 Offer II 043. 往完全二叉树添加节点
想到了就很简单:按照层序队列对其进行编号,左孩子是2倍,右孩子是2倍+1,所以需要维护一个hashmap,<Node,Integer>类型,存放结点和编号,每次新节点加入则为其分配一个序号,将其直接插入到相应位置下即可。class CBTInserter { TreeNode root; Map<Integer, TreeNode> map; public CBTInserter(TreeNode root) { this.root .
2021-12-20 22:52:42
75
原创 【无标题】
最关键的就是想明白了这是个什么单调栈!这是个递增单调栈,注意注意!往上会变大!递增单调栈找左右两侧小的数据!比如 5 2 3 1 7 65 入栈2 入栈 此时5必须出栈 左侧为0 右侧为2 说明左右边界是 0-23入栈1入栈 3出栈 左侧为2 入栈为1 说明是2-11入栈 2出栈 左侧为0 右侧为1 说明是0-17入栈6入栈 7 出栈 说明其左侧为 1 右侧为 6class Solution { public int largestRectangleArea(int[] h..
2021-12-17 14:59:57
90
原创 剑指 Offer II 037. 小行星碰撞
栈。class Solution { public int[] asteroidCollision(int[] asteroids) { Deque<Integer> st = new ArrayDeque<>(); for(int asteroid : asteroids){ /*几个条件只要满足一个就不会发生碰撞,可把当前行星压入栈: 1.栈为空,不管当前行星是正是负(往左还是往右)都要压.
2021-12-17 13:58:06
207
原创 剑指 Offer II 033. 变位词组
这个题很有意思,难度不大,但是思路有趣,代码的语法糖很多,注意一下。首先,创建一个hashmap,map中存放String:list-String,其含义为:经过排序的String:未经过排序的Stringlist。对于每个String,先将其排序,得到的新String进行contains,若存在在map中,则取出map中的list,将原始String添加进list中,若不存在在map中,则直接创建新的list并将其添加进map中,注意这里用排序后的String当成key,最终直接取出所有键值,并将..
2021-12-15 10:54:12
1647
原创 剑指 Offer II 032. 有效的变位词
简单题我重拳出击,一个26位的数组记录下标即可,第一个字符串+1第二个字符串-1,数组为0即可确认。在这里插入代码片class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length() || s.equals(t)) { return false; } int[] table = new int[26]; .
2021-12-15 10:27:32
493
原创 剑指 Offer II 031. 最近最少使用缓存
很简单:用一个hashmap存放key-Node。Node是一个双向链表的结点。每次添加新数据/访问数据,都要将Node放到双向链表的最后一位。添加新数据时超出下标,就将链表的第一位删去,同时更新map中的信息。class LRUCache { Node last; Node head; int capacity; HashMap<Integer,Node> map; class Node{ Node next; .
2021-12-15 10:24:04
771
原创 剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器
这道题的要求是O(1)插入和删除元素,hashmap可以达到O(1),随机访问元素,list可以达到O(1)。所以维护一个hashmap和list,hashmap中存放元素-listindex的数据,list中存放真实的数据。插入元素,将元素加入最后一位,同时将信息加入map中。删除元素,将最后一位的元素与要删除的元素替换,并且同时更新map中的信息,这样list在下次插入的时候还会插入到最后一个。随机访问元素 直接随机数访问数组即可。class RandomizedSet { pri.
2021-12-14 15:44:44
1045
原创 剑指 Offer II 028. 展平多级双向链表
本质DFS,先找child后找next。所以先next进栈,再child进栈。别忘了将child指针清空。/*// Definition for a Node.class Node { public int val; public Node prev; public Node next; public Node child;};*/class Solution { public Node flatten(Node head) { ...
2021-12-14 10:38:17
84
原创 剑指 Offer II 026. 重排链表
思路:找栈的中心位置,然后将后半部分全部送入栈中,然后一前一后挨个对接即可。class Solution { public void reorderList(ListNode head) { ListNode _head = head; Deque<ListNode> stack = new ArrayDeque<>(); int len = 0; while(_head != null){ .
2021-12-14 00:42:32
1139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人