- 博客(429)
- 资源 (55)
- 收藏
- 关注
原创 2021年最火技术:什么是元宇宙
2021年,“元宇宙”无疑是最火的概念。3月,元宇宙第一股Roblox在美国纽交所上市,首日市值超过380亿美金; 7月,Facebook宣布要在五年内转型成元宇宙公司; 8月,芯片剧透英伟达花费数亿美金,推出了为元宇宙打造的模拟平台Omniverse;在国内,腾讯,字节等互联网巨头也纷纷加入元宇宙这个赛道。元宇宙怎么理解?我们可以将元宇宙定义为一个虚拟的现实世界,什么意思呢,就好比我们睡觉时所做的梦一般,我们知道它可能是梦,但真实感依然会令人唏嘘,而元宇宙就像创造了一个现实的、可创作的梦
2021-12-23 02:25:18 11051
原创 广度遍历BFS模板
while queue 不空: cur = queue.pop() for 节点 in cur的所有相邻节点: if 该节点有效且未访问过: queue.push(该节点)如果要确定当前遍历到了哪一层,BFS 模板如下。这里增加了 level 表示当前遍历到二叉树中的哪一层了,也可以理解为在一个图中,现在已经走了多少步了。size 表示在当前遍历层有多少个元素,也就是队列中的元素数,我们把这些元素一次性遍历完,即把当前层的所有元素都向外走了一.
2021-12-22 01:05:24 320
原创 542. 01 矩阵
给定一个由 0 和 1 组成的矩阵 mat,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。输入:mat = [[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]输入:mat = [[0,0,0],[0,1,0],[1,1,1]]输出:[[0,0,0],[0,1,0],[1,2,1]]首先把每个源点 0 入队,然后从各个 0 同时开始一圈..
2021-12-21 13:27:33 272
原创 116. 填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。输入:root = [1,2,3,4,5,6,7]输出:[1,#,2,...
2021-12-20 10:01:00 418
原创 617. 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。输入: Tree 1 Tree 2 1 2 ...
2021-12-20 09:51:13 417
原创 695. 岛屿的最大面积
给你一个大小为 m x n 的二进制矩阵 grid 。岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1...
2021-12-20 09:28:17 204
原创 733. 图像渲染
有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标(sr, sc)表示图像渲染开始的像素值(行 ,列)和一个新的颜色值newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回经过上色渲染...
2021-12-20 08:02:03 229
原创 CC57 链表内指定区间反转
描述将一个节点数为 size 链表 m位置到n 位置之间的区间反转,要求时间复杂度O(n)O(n),空间复杂度O(1)O(1)。例如:给出的链表为1\to 2 \to 3 \to 4 \to 5 \to NULL1→2→3→4→5→NULL,m=2,n=4m=2,n=4,返回1\to 4\to 3\to 2\to 5\to NULL1→4→3→2→5→NULL.数据范围:链表长度0 < size \le 10000<size≤1000,0 < m \le n...
2021-12-11 22:00:59 806
原创 无重复字符的最长子串
public int lengthOfLongestSubstring(String s) { // 记录字符上一次出现的位置 int[] last = new int[128]; for(int i = 0; i < 128; i++) { last[i] = -1; } int n = s.length(); int res = 0; int start = 0; ...
2021-12-07 01:43:51 3701
原创 CC130 删除链表的倒数第n个节点
算法思想一:双指针由于我们需要找到倒数第 n 个节点,因此可以使用两个指针fast 和 slow 同时对链表进行遍历,并且 fast 比 slow 超前 n 个节点。当 fast 遍历到链表的末尾时,slow 就恰好处于倒数第 n 个节点。具体地,初始时 fast 和 slow 均指向头节点。首先使用 fast 对链表进行遍历,遍历的次数为 n。此时,fast 和 slow 之间间隔了 n-1 个节点,即 fast 比 slow 超前了 n 个节点。在这之后,同时使用 fast 和 slow 对链表
2021-11-05 02:24:15 492
原创 237. 删除链表中的节点
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:指定链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9/** * Definition for singly-linked list. * pu...
2021-11-05 00:04:04 417
原创 CC22 二叉树根节点到叶子节点的所有路径和
描述给定一个二叉树的根节点root,该树的节点值都在数字\ 0-90−9之间,每一条从根节点到叶子节点的路径都可以用一个数字表示。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n例如根节点到叶子节点的一条路径是1\to 2\to 31→2→3,那么这条路径就用\ 123123来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:这颗二叉树一共有两条...
2021-11-03 02:26:37 887
原创 CC51 判断二叉搜索树
描述判断给出的二叉树是否是一个二叉搜索树(BST)二叉搜索树的定义如下一个节点的左子树上节点的值都小于自身的节点值 一个节点的右子树上节点的值都大于自身的节点值 所有节点的左右子树都必须是二叉搜索树如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读我们用如下方法将二叉树序列化:二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。例如: 1 / \ 2 3 / 4 \ 5上...
2021-11-03 00:46:25 578
原创 CC14 出现一次的数字ii
描述现在有一个整数类型的数组,数组中只有一个元素只出现一次,其余元素都出现三次。你需要找出只出现一次的元素数据范围: 数组长度满足0 < n \le 40000<n≤4000,数组中每个元素的值满足0 \le val \le 21474836480≤val≤2147483648进阶:空间复杂度O(1)O(1), 时间复杂度O(n)O(n)输入:[0,0,0,5]返回值:5输入:[0]返回值:0import java.util.*;imp...
2021-11-03 00:28:25 210
原创 CC48 对称的二叉树
描述给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)例如: 下面这棵二叉树是对称的数据范围:节点数满足0 \le n \le 10000≤n≤1000,节点上的值满足|val| \le 1000∣val∣≤1000要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)备注:你可以用递归和迭代两种方法解决这个问题输入:{1,2,2,3,4,4,3}返回值:true/*publ...
2021-11-01 10:25:26 291
原创 CC6 二叉树的后序遍历
描述用递归的方法对给定的二叉树进行后序遍历。例如:给定的二叉树为{1,#,2,3},返回[3,2,1].import java.util.*;import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /**
2021-10-07 12:29:18 539
原创 CC140 回文数字
描述在不使用额外的内存空间的条件下判断一个整数是否是回文。回文指逆序和正序完全相同。提示:负整数可以是回文吗?(比如-1)如果你在考虑将数字转化为字符串的话,请注意一下不能使用额外空间的限制你可以将整数翻转。但是,如果你做过题目“反转数字”,你会知道将整数翻转可能会出现溢出的情况,你怎么处理这个问题?示例1输入:121返回:true示例2输入:122返回:falsepublic class Solution { /** *
2021-10-07 12:09:45 524
原创 27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任何
2021-10-07 12:04:40 528
原创 LC8 重排链表
描述将给定的单链表\ LL:L_0→L_1→…→L_{n-1}→L_ nL0→L1→…→Ln−1→Ln重新排序为:L_0→L_n →L_1→L_{n-1}→L_2→L_{n-2}→…L0→Ln→L1→Ln−1→L2→Ln−2→…要求使用原地算法,不能只改变节点内部的值,需要对实际的节点进行交换。示例1输入:{1,2,3,4}返回值:{1,4,2,3}说明:给定head链表1->2->3->4, 重新排列为 1->4->2->..
2021-09-21 20:58:52 576
原创 LC55 二叉树的中序遍历
描述给出一棵二叉树,返回这棵树的中序遍历例如:给出的二叉树为{1,#,2,3},返回[1,3,2].备注:递归的解法太没有新意了,你能用迭代的方法来解这道题吗?示例1输入:{1,#,2,3}返回值:[1,3,2]import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } *
2021-09-17 00:40:57 73
原创 LC7 求二叉树的前序遍历
描述求给定的二叉树的前序遍历。例如:给定的二叉树为{1,#,2,3},返回:[1,2,3].备注;用递归来解这道题很简单,你可以给出迭代的解法么?如果你不明白{1,#,2,3}的含义,点击查看相关信息示例1输入:{1,#,2,3}返回值:[1,2,3]import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNo
2021-09-15 03:03:54 100
原创 LC49 判断二叉树是否相等
描述给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值。示例1输入:{1},{1}返回值:true示例2输入:{1,2},{1,#,2}返回值:falseimport java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right =
2021-09-15 02:37:48 173
原创 LC15 出现一次的数字
描述现在有一个整数类型的数组,数组中素只有一个元素只出现一次,其余的元素都出现两次。注意:你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么?示例1输入: [1,0,1]返回值: 0两个相同的数异或结果为0,不同为1 ,根据该规则下列过程如下假设 数组为 2,3,2,3,4,1,4那么结果应该为12^3=0000 0010 ^ 0000 0011 = 0000 0001 11^2=0000 0001 ^ 0000 0010 = .
2021-09-15 02:28:40 92
原创 设计模式之观察者模式注意事项
设计原则一找出程序中会变化的方面,然后将其和固定不变的方面相分离。在观察者模式中,会改变的是主题的状态,以及观察者的树木和类型。用这个模式,你可以改变依赖于主题状态的对象,却不必改变主题,这就叫提前规划;设计原则二针对接口编程,不针对实现编程主题与观察者都使用接口:观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点。设计原则三多用组合,少用继承利用组合将许多观察者组合进主题中。对象之间的这种关系不是通过继承产生的
2021-09-12 23:48:44 139
原创 关于Reactor模型的基本概念理解
Netty采用Reactor线程模型。这里面主要有三种Reactor线程模型。分别是单线程模式、主从Reactor模式、多Reactor线程模式。其都可以通过初试和EventLoopGroup进行设置。其主要区别在于,1、单Reactor模式就是一个线程,既进程处理连接,也处理IO。类似于我们传统的OIO编程。2、主从Reactor模式,其实就是将监听连接和处理IO的分开在不同的线程完成。3、最后,主从Reactor线程模型,为了解决多Reactor模型下单一线程性能不足的问题。
2021-08-15 15:06:18 165
原创 辩证思考与灵活应用
面向对象分析、设计、实现,每个环节的界限划分都比较清楚。而且,设计和实现基本上是按照功能点的描述,逐句照着翻译过来的。这样做的好处是先做什么、后做什么,非常清晰、明确,有章可循,即便是没有太多设计经验的初级工程师,都可以按部就班地参照着这个流程来做分析、设计和实现。不过,在平时的工作中,大部分程序员往往都是在脑子里或者草纸上完成面向对象分析和设计,然后就开始写代码了,边写边思考边重构,并不会严格地按照刚刚的流程来执行。而且,说实话,即便我们在写代码之前,花很多时间做分析和...
2021-08-15 13:56:47 210
原创 定义类与类之间的交互关系
泛化(Generalization)可以简单理解为继承关系。public class A { ... }public class B extends A { ... }实现(Realization)一般是指接口和实现类之间的关系。public interface A {...}public class B implements A { ... }聚合(Aggregation)是一种包含关系,A 类对象包含 B 类对象,B 类对象的生命周期可以不依赖 A 类对象的生命周期,也就是说
2021-08-15 13:52:20 127
原创 如何合理的分析一个需求,制定一个完善的技术方案
针对框架、类库、组件等非业务系统的开发,其中一个比较大的难点就是,需求一般都比较抽象、模糊,需要你自己去挖掘,做合理取舍、权衡、假设,把抽象的问题具象化,最终产生清晰的、可落地的需求定义。需求定义是否清晰、合理,直接影响了后续的设计、编码实现是否顺畅。所以,作为程序员,你一定不要只关心设计与实现,前期的需求分析同等重要。需求分析的过程实际上是一个不断迭代优化的过程。我们不要试图一下就能给出一个完美的解决方案,而是先给出一个粗糙的、基础的方案,有一个迭代的基础,然后再慢慢优化,这样一个思考过程能让我们摆脱无从
2021-08-15 13:03:57 573
转载 03 | 面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
面向对象对于这部分内容,你需要掌握下面这 7 个大的知识点。面向对象的四大特性:封装、抽象、继承、多态面向对象编程与面向过程编程的区别和联系面向对象分析、面向对象设计、面向对象编程接口和抽象类的区别以及各自的应用场景基于接口而非实现编程的设计思想多用组合少用继承的设计思想面向过程的贫血模型和面向对象的充血模型总结1: 要真正落地面向对象编程,面向对象设计是前提,没有面向对象的设计意识,写着写着就成了面条代码。2:以前只知道封装、继承、多态,全然忽视了最重要的抽
2021-08-15 11:51:20 102
转载 02 | 从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?
1.如何评价代码质量的高低?灵活性(flexibility)、可扩展性(extensibility)、可维护性(maintainability)、可读性(readability)、可理解性(understandability)、易修改性(changeability)、可复用(reusability)、可测试性(testability)、模块化(modularity)、高内聚低耦合(high cohesion loose coupling)、高效(high effciency)、高性能(high perf
2021-08-15 11:48:35 287
转载 01 | 为什么说每个程序员都要尽早地学习并掌握设计模式相关知识?
1. 应对面试中的设计模式相关问题2. 告别写被人吐槽的烂代码3. 提高复杂代码的设计和开发能力4. 让读源码、学框架事半功倍5. 为你的职场发展做铺垫
2021-08-15 11:46:59 103
原创 贫血模型概念
贫血模型流行的原因:实现简单和上手快。具体解释慢慢看:”贫血模型“的开发模式为什么会流行?1、实现简单。Object仅仅作为传递数据的媒介,不用考虑过多的设计方面,将核心业务逻辑放到service层,用Hibernate之类的框架一套,完美解决任务。2、上手快。使用贫血模式开发的web项目,新来的程序员看看代码就能“照猫画虎”干活了,不需要多高的技术水平。所以很多程序员干了几年,仅仅就会写CURD。3、一些技术鼓励使用贫血模型。例如J2EE Entity Beans,Hibernate等。总结:
2021-08-15 03:00:46 367
原创 NC88 寻找第K大
描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(1<=K<=n),请返回第K大的数(包括重复的元素,不用去重),保证答案存在。示例1输入 [1,3,5,2,2],5,3返回 2示例2输入[10,10,9,9,8,7,5,6,4,3,4,2],12,3返回值9说明:去重后的第3大是8,但本题要求包含重复的元素,不用去重,所以输出9二分查找和堆查找一、二分查找是利用快速排序的二分特点利..
2021-08-06 01:03:56 335
原创 NC145 01背包
描述已知一个背包最多能容纳物体的体积为V现有n个物品第i个物品的体积为v_ivi第i个物品的重量为w_iwi求当前背包最多能装多大重量的物品示例1输入: 10,2,[[1,3],[10,4]]返回值:4说明:第一个物品的体积为1,重量为3,第二个物品的体积为10,重量为4。只取第二个物品可以达到最优方案,取物重量为4备注:1≤V≤2001 \leq n \leq 2001≤n≤2001 \leq v_i \leq 2001≤vi≤2001 \leq.
2021-07-26 23:52:32 208
原创 NC3 链表中环的入口结点
描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表返回值描述:返回链表的环的入口结点即可。而我们后台程序会打印这个节点示例1{1,2},{3,4,5}返回值:3说明:返回环形链表入口节点,我们后台会打印该环形链表入口节点,即3示例2{1},{}"null"说明:没有环,返回null,后台打印"null"示例3
2021-07-24 14:37:14 126
原创 NC7 买卖股票的最好时机
描述假设你有一个数组,其中第\ ii个元素是股票在第\ ii天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。示例1输入:[1,4,2]返回值:3示例2[2,4,1]2import java.util.*;public class Solution { public int maxProfit(int[] prices) { if(prices==null||pr...
2021-07-23 23:26:24 135
原创 NC14 按之字形顺序打印二叉树
描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]示例1输入:{1,2,3,#,#,4,5}复制返回值:[[1],[3,2],[4,5]]import java.util.*;/*public class TreeNode { int val = 0; Tr
2021-07-21 08:58:28 261
原创 NC156 数组中只出现一次的数(其它数出现k次)
描述给定一个整型数组arrarr和一个整数k(k>1)k(k>1)。已知arrarr中只有 1 个数出现一次,其他的数都出现kk次。请返回只出现了 1 次的数。示例1[5,4,1,1,5,1,5],3返回: 4import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @pa...
2021-07-17 23:01:56 214
原创 减少消息延迟的一些办法
想要减少消息的处理延迟,我们需要在消费端和消息队列两个层面来完成。想要减少消息的处理延迟,我们需要在消费端和消息队列两个层面来完成。在消费端,我们的目标是提升消费者的消息处理能力,你能做的是:不过,第二种方式会受限于消息队列的实现。比如说,如果消息队列使用的是 Kafka 就无法通过增加消费者数量的方式,来提升消息处理能力。因为在 Kafka 中,一个 Topic(话题)可以配置多个 Partition(分区),数据会被平均或者按照生产者指定的方式,写入到多个分区中,那么在消费的时候,Kafk
2021-06-06 11:31:24 744
原创 leetCode81:81. 搜索旋转排序数组 II
已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4]
2021-06-06 09:36:49 503
sublime Text2皮肤
2014-03-19
java并发包源码分析(3)ThreadLocal
2018-07-05
autoruns查看系统进程,查找病毒木马的好工具
2014-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人