自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CiscoDevNet/yang-explorer部署踩坑记录

CiscoDevNet/yang-explorer部署踩坑记录主要是根据github步骤来做注意将ip-address改为本机实际的ip地址访问 http://:8088/static/YangExplorer.html 会要求安装flash,但是21年主流浏览器都已启用,mac电脑只能先安装虚拟机,然后在虚拟机内通过qq浏览器访问想要批量上传yang文件,可通过python manage.py bulkupload --user guest --dir <path/to/yang/mode

2021-12-07 15:52:39 677 3

原创 Hashmap的关键方法源码分析(put, get, resize)

put源码final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; //变量,tab为数组,p为要放置位置上的元素,n为数组长度,i为要放置的位置 if ((tab = table) == null || (n = tab.length) == 0)

2021-06-03 22:03:59 290

原创 回溯问题经典算法—N皇后

题目n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。解法套回溯模板void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking

2021-05-17 11:04:15 368

原创 Java泛型知识点总结

所谓泛型, 就是允许在定义类、 接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。 这个类型参数将在使用时(例如,继承或实现这个接口, 用这个类型声明变量、 创建对象时) 确定(即传入实际的类型参数, 也称为类型实参)【本质是参数化类型】使用泛型而不是object的原因:解决元素存储的安全性问题解决获取数据元素时, 需要类型强制转换的问题Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮。【

2021-04-28 21:28:42 305

原创 从组合问题谈回溯算法

题目给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。输入: n = 4, k = 2输出:[[2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]题解经典的回溯问题,先来看看回溯三部曲回溯函数模板返回值以及参数。void backTracking(参数)回溯函数终止条件。if (终止条件) {存放结果; return;}回溯搜索的遍历过程。for (选择:本层集合中元素(树中节点孩子的数量就是集合

2021-04-28 10:28:05 152

原创 MySQL中连接表时join和on的区别

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用left jion时,on和where条件的区别如下:1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。...

2021-04-17 20:17:39 598

原创 递归构造二叉树

根据中序遍历和后序遍历构造二叉树中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]根据上述两个遍历数组,可以构造出如下的二叉树构造过程就是每次找到后序遍历数组的最后的一个值,就是根节点,然后在中序遍历中找到该节点所对应的下标,将中序数组分割为两个数组,再到后序数组中找到对应的两个数组,递归构造。具体步骤如下:第一步:如果数组大小为零的话,说明是空节点了。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找

2021-04-17 11:40:36 720

原创 力扣刷题257—二叉树的所有路径

题目给定一个二叉树,返回所有从根节点到叶子节点的路径。输入:1/ 2 35输出: [“1->2->5”, “1->3”]题解用两个队列迭代,一个队列存放节点,另一个队列放路径,当遍历到叶子节点时,则加入到列表中,代码如下:public List<String> binaryTreePaths(TreeNode root) { List<String> res = new ArrayList<>();

2021-04-15 17:04:22 185

原创 Java判断是否为平衡二叉树

平衡二叉树一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1自底向上的递归,如果两个子树的高度差大于1,则返回-1,说明不平衡了,当有一个子树为-1时,说明整个二叉树都是不平衡的。时间复杂度和空间复杂度都为O(n)public boolean isBalanced(TreeNode root) { if (root == null) return true; return getDepth(root) == -1 ? false : true; }

2021-04-15 16:20:46 679

原创 java实现二叉树的最大深度

递归法1,确定递归的参数与返回2,确定递归终止条件3,确定单层递归逻辑public int maxDepth(TreeNode root) { return dfs(root); } public int dfs(TreeNode root) { if (root == null) return 0; return Math.max(dfs(root.left), dfs(root.right)) + 1; }迭代法利用层

2021-04-14 09:36:23 406

原创 Java用队列实现层次遍历

经典写法,注意每次统计队列中的元素个数public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if (root == null) return res; Deque<TreeNode> queue = new ArrayDeque<>

2021-04-12 10:54:57 641

原创 Morris遍历详解——实现二叉树的前序,中序遍历

Morris遍历Morris遍历是指在线性时间内,利用空闲指针只占用常数空间来实现遍历,其主要思路如下记当前节点指针为cur1,若cur无左树,则cur=cur.right2,若cur有左树,则找到其最右节点mostright,分为两种情况(a)若mostright的右指针为空,则指向当前节点,cur左移mostright.right=cur; cur=cur.left;(b)若mostright的右指针指向当前cur,则说明第二次访问,又指回空,cur右移mostright.right=

2021-04-12 10:43:53 463

原创 Java二叉树的前序,中序,后序遍历的递归与迭代写法

二叉树的遍历前中后是指根节点被访问的顺序,左节点永远先于右节点被访问前序遍历:根-左-右中序遍历:左-根-右后序遍历:左-右-根如下图所示递归解法递归算法三要素:1,确定递归函数的参数和返回值。2,确定终止条件。3,确定单层递归的逻辑。其实就是模板,改变访问顺序前序递归public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayLi

2021-04-11 17:07:57 438

原创 力扣刷题347-前k个高频元素

题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。题解先用map统计数组出现频率,然后构造一个小顶堆,当小顶堆的元素个数小于k时,就一直加入小顶堆。当小顶堆元素个数等于k时,若堆顶最小元素的频率也大于即将加入的,则舍弃该数。否则弹出栈顶元素,加入该数。代码如下public int[] topKFrequent(int[] nums, int k) { int n = nums.length; if (nums == null || n == 0 || k

2021-04-10 21:10:39 370

原创 力扣刷题239 - 滑动窗口最大值

题目给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。题解使用双向队列,存储数组最大值的下标,这样可以方便判断是否在滑动窗口内,并使得队列中的下标所对应的数是按照从大到小顺序排列,代码如下public int[] maxSlidingWindow(int[] nums, int k) { int n = nums.length; if (

2021-04-10 20:38:56 179

原创 栈与队列的相互实现

用栈实现队列力扣232-用栈实现队列用两个栈来模拟队列的输入输出操作,一个输入栈,一个输出栈。注意代码的复用class MyQueue { Stack<Integer> s1; //输入栈 Stack<Integer> s2; //输出栈 /** Initialize your data structure here. */ public MyQueue() { s1 = new Stack<>();

2021-04-09 10:56:38 133

原创 详细讲解KMP算法

KMP算法介绍KMP算法是一个字符串匹配算法,在文本串中找到匹配的模式串,其可将时间复杂度降为O(m+n),如下所示文本串 a a b a a b a a f模式串 a a b a a f上述匹配中,模式串匹配到 f 时发现不匹配了,就会回到 b 所在的位置重新匹配,为什么选择 b 呢,这就是KMP算法解决的问题(其实本质是找对称,b 的前面和后面都是aa,所以前面的aa已经被匹配过了,可跳过)。前缀表首先理解一下什么叫做前缀和后缀,前缀是指包含首字母但不包含尾字母的所有子串,后缀是指包含尾

2021-04-07 19:52:36 322

原创 力扣刷题剑指offer05——空格替换

题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”题解使用库函数replacereturn s.replace(" ","%20");使用StringBuilder,比StringBuffer更快public String replaceSpace(String s) { if("".equals(s)) return s; String

2021-04-06 15:17:11 190

原创 位运算实现swap交换

实现swap有两种方法值交换,借用临时变量存储int temp = a;a = b;b = temp;位运算,使用异或的性质a ^ a=0a ^ 0=aa ^ b=b ^ aa ^= b;b ^= a;a ^= b;解释a=(a ^ b);b=(a ^ b) ^ b=a ^ (b ^ b) = a ^ 0 = a;a=(a ^ b) ^ a =(a ^ a) ^ b = 0 ^ b =b;...

2021-04-06 09:43:17 1491

原创 力扣刷题454——四数相加Ⅱ

题目给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。题解四个for循环,会超时参考两数之和,用hash表记录下次想要找到的数组,分成两组,同时记录和的次数。代码如下:public int

2021-04-05 20:47:35 260

原创 力扣刷题707——设计链表

题目设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表

2021-04-02 14:43:16 301

原创 力扣刷题203——移除链表元素

题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。题解经典的链表指针移动算法题,一般这种头节点会发生改变或移除的链表题,可通过添加一个虚拟头节点来解决,减少考虑情况。一般链表类题目,就是要多画图模拟情况,特别要考虑边界情况,弄清楚边界条件是node != null 还是node.next != null,分为迭代法与递归法,递归法不设虚拟头节点,但是返回结果时同样要考虑头节点是否要被移除。迭代法pu

2021-04-02 10:33:01 266

原创 力扣刷题59——螺旋矩阵Ⅱ

题目给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。题解这种多次循环的题要特别注意边界条件,这里给出一种简单易懂清晰的通用模板,用四个变量up,down,left,right分别表示上下左右四个方向,按照螺旋的方向一层一层的遍历,更改方向的边界。当超出边界时立马跳出循环,代码如下public int[][] generateMatrix(int n) { if (n < 1) return ne

2021-04-01 19:35:11 203

原创 力扣刷题209——长度最小的子数组

题目给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。题解暴力法,双重循环,找到所有可能的子数组,比较得到长度最小的,时间复杂度O(n^2)滑动窗口,用两个指针指向窗口的起始位置,记录两个指针间数字的和,若和小于目标值,则窗口增大,否则窗口缩小,并比较此时的窗口大小,时间复杂度为o(n),代码

2021-04-01 16:14:08 254

原创 力扣刷题 142——环形链表Ⅱ

题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。题解经典快慢指针,环形链表

2021-04-01 15:01:18 210

原创 力扣刷题13——三数之和

题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]题解暴力遍历用三个指针遍历,要求无重复数组,则先排序,然后遇到一样的跳过。时间复杂度为O(n^3),运行超时。代码如下public List<List<Integ

2021-03-31 14:44:18 122

原创 力扣刷题27——移除元素

移除元素题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的

2021-03-30 20:43:30 286

原创 力扣刷题35——二分法的边界确定

数组 力扣刷题35——二分法的边界确定题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0解法经典的二分法,数组有序,但是写的时候错了很多次,因为无法找准边界,重点是区

2021-03-30 20:29:16 208

空空如也

空空如也

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

TA关注的人

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