- 博客(136)
- 资源 (2)
- 收藏
- 关注
原创 记一道Leetcode很有意思的题
题目:数组中两个数的最大异或值题目描述:解法思路:根据这个异或运算的这个特性x=a^b ==> a=x^b可以写出下面解法class Solution { // 最高位的二进制位编号为 30 static final int HIGH_BIT = 30; public int findMaximumXOR(int[] nums) { int x = 0; for (int k = HIGH_BIT; k >=
2022-02-25 14:58:44
547
原创 十大算法之分治算法
分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 分治算法可以求解的一些经典问题二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择最接近点对问题 循环赛日程表 汉诺塔分治算法的基本步骤分治法在每一层递归上.
2022-01-14 16:02:56
297
原创 图的遍历框架
判定二分图的代码逻辑可以这样写:/* 图遍历框架 */void traverse(Graph graph, boolean[] visited, int v) { visited[v] = true; // 遍历节点 v 的所有相邻节点 neighbor for (int neighbor : graph.neighbors(v)) { if (!visited[neighbor]) { // 相邻节点 neighbor 没有被访问.
2022-01-14 15:04:03
320
原创 LeetCode之图以及二分图的介绍
LCP 07. 传递信息题目描述:方法一:深度优先搜索具体编码:class Solution { int ways, n, k; List<List<Integer>> edges; public int numWays(int n, int[][] relation, int k) { ways = 0; this.n = n; this.k = k; ..
2022-01-13 21:17:26
352
原创 747. 至少是其他数字两倍的最大数
747. 至少是其他数字两倍的最大数题目描述:思路代码实现class Solution { public int dominantIndex(int[] nums) { int m1 = -1, m2 = -1; int index = -1; for (int i = 0; i < nums.length; i++) { if (nums[i] > m1) { ..
2022-01-13 20:05:42
73
原创 图的深度优先遍历和广度优先遍历
图遍历介绍所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历深度优先遍历基本思想图的深度优先搜索(Depth First Search) 。深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。 我们
2022-01-13 10:13:20
3684
原创 图的创建图解和代码实现
图的快速入门案例:要求: 代码实现如下图结构.思路分析(1) 存储顶点String 使用 ArrayList (2) 保存矩阵 int[][] edges 代码实现代码实现package graph;import java.util.ArrayList;import java.util.Arrays;public class Graph { private ArrayList<String> vertexList; // 存储节点的集合 pri
2022-01-13 09:50:32
551
原创 数据结构之图
为什么要有图:前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图图的举例说明:图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:图的常用概念:图的表示方法:图的表示方式有两种:二维数组表示(邻接矩阵) 链表表示(邻接表)邻接矩阵:邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而..
2022-01-13 09:26:21
145
原创 LeetCode之滑动窗口
438. 找到字符串中所有字母异位词题目描述思路:滑动窗口具体代码class Solution { public List<Integer> findAnagrams(String s, String p) { int sLen = s.length(), pLen = p.length(); if (sLen < pLen) { return new ArrayList<Inte..
2022-01-05 18:36:11
349
原创 字节面试算法题
剑指 Offer 35. 复杂链表的复制题目描述思路哈希表+回溯具体代码class Solution { Map<Node, Node> cachedNode = new HashMap<Node, Node>(); public Node copyRandomList(Node head) { if (head == null) { return null; } ..
2022-01-01 15:54:32
348
原创 LeetCode 75颜色分类
75. 颜色分类题目描述:思路与算法:单指针我们可以考虑对数组进行两次遍历。在第一次遍历中,我们将数组中所有的 0 交换到数组的头部。在第二次遍历中,我们将数组中所有的 1 交换到头部的 0 之后。此时,所有的 2 都出现在数组的尾部,这样我们就完成了排序。具体代码class Solution { public void sortColors(int[] nums) { int n = nums.length; int ptr = 0;
2021-12-28 15:24:06
262
原创 算法面试题
快手面试题题目描述博主的思路:先用一个集合list,存储0的下标,然后依次判断,这些0所在的位置能否种花,若能,则将flowerbed对应位置改为1;具体代码:class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { if(n==0){ return true; } if(flowerbed.length...
2021-12-26 14:57:28
1618
1
原创 树之二叉树(2)
965. 单值二叉树题目描述思路:广度优先搜索我们先进行一次深度优先搜索,获取这颗树中的所有节点的值。然后,就可以判断所有节点的值是不是都相等了。代码:class Solution { List<Integer> vals; public boolean isUnivalTree(TreeNode root) { vals = new ArrayList(); dfs(root); for (int .
2021-12-25 18:22:39
564
原创 B树和B加树以及B*树原理图解
B树的介绍B-tree树即B树,B即Balanced,平衡的意思。有人把B-tree翻译成B-树,容易让人 产生误解。会以为B-树是一种树,而B树又是另一种树。实际上,B-tree就是指的B树。前面已经介绍了2-3树和2-3-4树,他们就是B树(英语:B-tree 也写成B-树),这里我们再做一个说明,我们在学习Mysql时,经常听到说某种类型的索引是基于B树或者B+树的,如图:B树的说明:B树的阶:节点的最多子节点个数。比如2-3树的阶是3,2-3-4树的阶是4 B-树的...
2021-12-25 12:04:30
627
原创 LeetCode48 旋转图像
48. 旋转图像题目描述方法一思路:辅助数组(我觉得这种方法很暴力,很无脑,一下可以想到)具体代码class Solution { public void rotate(int[][] matrix) { int n=matrix.length; int [][]matrixF=new int[n][n]; for(int i=0;i<n;i++){ int k=0; for(
2021-12-24 15:05:11
404
原创 leetCode之枚举
13. 罗马数字转整数题目描述思路:枚举每一个值具体代码class Solution { public int romanToInt(String s) { int sum = 0; char pre = s.charAt(0); int preNum = getValue(pre); for(int i=1;i<s.length();i++){ if(preNum<ge.
2021-12-22 23:07:33
144
原创 LeetCode二叉树的深度问题
LeetCode 104:二叉树的最大深度题目描述思路:深度优先搜索代码:class Solution { public int maxDepth(TreeNode root) { if (root==null){ return 0; }else { int left = maxDepth(root.left); int right=maxDepth(root.ri.
2021-12-20 21:00:13
458
原创 LeetCode最接近的三数之和
题目描述:(三指针题)无脑解法:暴力for,三数所以是三层class Solution { public int threeSumClosest(int[] nums, int target) { int s=-9999; int s1=-999; List list= new ArrayList<Integer>(); for(int i=0;i<nums.length-2;i++){ ..
2021-12-18 20:08:38
255
1
原创 数据解压-----续赫夫曼编码
字节转二进制字符串// 完成数据的解压 // 思路 // 1 将huffmanCodeBytes [40, 46, -56, 46, -56, 46, -55, 5, -123, 6, -88, -46, -126, -20, -124, -126, 24 ] // 重新转成赫夫曼编码对应的字符串 100100100... // 2 将赫夫曼对应的二进制字符串 100100100... 对照 哈夫曼编码转成 i like java...... /**
2021-12-17 14:34:54
621
原创 LeetCode532. 数组中的 k-diff 数对
题目描述思路:哈希表具体代码class Solution { public int findPairs(int[] nums, int k) { Map map= new HashMap<Integer,Integer>(); for(int i=0;i<nums.length;i++){ for(int j=0;j<nums.length;j++){ if(i==j){
2021-12-16 10:46:46
348
原创 LeetCode 645错误的集合
题目描述思路:计数具体代码class Solution { public int[] findErrorNums(int[] nums) { int n = nums.length; int[] cnts = new int[n+1]; for(int x:nums){ cnts[x]++; } int a[]=new int [2]; for(int i=..
2021-12-16 09:31:46
613
原创 原码、反码、补码的介绍及其关系
二进制在运算中的说明1.二进制是逢2进位的进位制,0、1是基本算符。2. 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增!规则网上对原码,反码,补码的解释过于复杂,我这里精简几句话:对于有符号的而言:1.二进制的最高位是符.
2021-12-15 21:33:14
484
原创 位运算(一)
题目描述:对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。例如,整数 5 的二进制表示是 "101" ,取反后得到 "010" ,再转回十进制表示得到补数 2 。给你一个整数 num ,输出它的补数。示例 1:输入:num = 5输出:2解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。示例 2:输入:num = 1输出:0解释:1 的二进制表示为 1(没有前导零位),其补数为 0
2021-12-14 09:30:57
790
原创 初始JVM
我们为什么要学习JVMjvm值得推荐的书籍:深入理解Java虚拟机 作者:周志明字节码JVM跨语言的平台字节码与多语言混合编程虚拟机与Java虚拟机介绍JVM的位置JVM整体结构Java代码执行流程...
2021-12-13 00:12:09
75
原创 剑指 Offer 32 - II. 从上到下打印二叉树 II
题目描述思路:层次遍历具体代码class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); if(
2021-12-12 16:32:51
233
原创 LeetCode110、108有关于平衡树的题
思路解法一:自顶向下的递归代码不难想 但是不要忘了下面这个具体代码class Solution { public boolean isBalanced(TreeNode root) { if (root == null) { return true; } else { return Math.abs(height(root.left) - height(root.right))...
2021-12-12 15:17:20
82
原创 LeetCode 剑指Offer68二叉树最近的公共祖先
思路递归代码class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null || root == p || root == q) return root; TreeNode left = lowestCommonAncestor(root.left, p, q); T...
2021-12-12 09:31:21
160
原创 LeetCode617 合并二叉树
题目描述思路:一看二叉树,好了,往递归靠。具体代码class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if (t1 == null) { return t2; } if (t2 == null) { return t1; } TreeNode merged =
2021-12-11 16:36:20
228
原创 JDK的动态代理源码剖析
静态代理:架构package com.kwq.static_;public interface Mapperl { public void jdbcOpera();}package com.kwq.static_;//被代理对象public class UserMapper implements Mapperl { public void jdbcOpera(){ // System.out.println("======获取数据库连接====
2021-12-10 17:47:27
812
原创 狂神JAVA基础之反射
2、反射机制主要内容:2.1、Java反射机制概述1、静态VS动态语言动态语言: 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被 引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代 码可以根据某些条件改变自身结构。 主要动态语言: Object-C、 C#、JavaScript、 PHP、 Python等。 例如下面这张图 静态语言: 与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、 C.
2021-12-10 11:08:30
190
1
原创 狂神JAVA基础之注解
1、注解1.1、什么是注解 Annotation是从JDK 5.0开始引入的新技术 Annotation的作用: 不是程序本身,可以对程序作出解释。(这一点和注释(comment)没什么区别) 可以被其他程序(比如:编译器等)读取 Annotation的格式: 注解是以"@注释名"在代码中存在的﹐还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked") Annotation在哪里使用? 可以附加在packag
2021-12-09 15:43:45
461
原创 Leetcode 101 对称二叉树
题目描述思路:如果一个树的左子树与右子树镜像对称,那么这个树是对称的。因此,该问题可以转化为:两个树在什么情况下互为镜像?如果同时满足下面的条件,两个树互为镜像:它们的两个根结点具有相同的值每个树的右子树都与另一个树的左子树镜像对称解法import java.util.ArrayList;import java.util.List;class TreeNode { int val; TreeNode left; TreeNode
2021-12-08 18:59:40
395
原创 遍历线索化二叉树的实现
在ThreadedBinaryTree新增方法 //遍历线索化二叉树的方法 public void threadedList(){ //定义一个变量,存储当前遍历的结点。从root开始 HeroNode node=root; while (node!=null){ //循环的找到leftType==1的结点,第一个找到就是8结点 //后面随着遍历而变化,因为当leftType==1时,说明该结点是
2021-12-08 15:35:55
170
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人