自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode回溯算法——代码随想录

回溯法也可以叫做回溯搜索法,它是一种搜索的方式,回溯是递归的副产品,只要有递归就会有回溯。回溯法解决的问题都可以抽象为树形结构,因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。递归就要有终止条件,所以必然是一棵高度有限的树(N叉树)。大家可以从图中看出for循环可以理解是横向遍历,backtracking(递归)就是纵向遍历,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了。一般模板如下:时间复杂度子集问题分析:排列问题分析:组合

2023-06-09 13:41:12 262

原创 LeetCode二叉树——代码随想录

二叉树三种深度遍历递归144.前序遍历class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); traversal(root,ans); return ans; } private void traversal(TreeNode

2023-05-26 21:40:49 272 3

原创 LeetCode栈和队列——代码随想录

分两个循环走,一样//解法一 //自定义数组 class MyQueue {//弹出元素时,比较当前要弹出的数值是否等于队列出口的数值,如果相等则弹出 //同时判断队列当前是否为空 void poll(int val) {if(!} } //添加元素时,如果要添加的元素大于入口处的元素,就将入口元素弹出 //保证队列元素单调递减 //比如此时队列元素3,1,2将要入队,比1大,所以1弹出,此时队列:3,2 void add(int val) {while(!

2023-05-16 20:37:38 112

原创 Java中的栈和队列

Vector是动态数组,而Stack继承与它!Vector因为顶层设计原因,继承他的Stack会暴露get/set/add等方法,失去了面向对象的封装的意义。用户可能会有意无意地调用这些操作,这将成为软件工程中重要的 bug 来源。所以栈一般采用Deque,但它是,所以最好自己定义接口再做一层封装,屏蔽其他方法。在多线程方面,Vector实现了线程安全,效率比较慢不如ArrayList动态数组,多线程情况下也不推荐使用而是用 java.util.concurrent 包下的数据结构替代。

2023-05-16 20:28:18 136

原创 LeetCode字符串——代码随想录

如果 s[i] 与 s[j + 1] 相同,那么就同时向后移动i 和j 说明找到了相同的前后缀,同时还要将j(前缀的长度)赋给next[i], 因为next[i]要记录相同前后缀的长度。如何判断在文本串s里出现了模式串t呢,如果j指向了模式串t的末尾,那么就说明模式串t完全匹配文本串s里的某个子串了。那么 s[i] 与 s[j+1] 不相同,就要找 j+1前一个元素在next数组里的值(就是next[j])。因为j初始化为-1,那么i就从1开始,进行s[i] 与 s[j+1]的比较。

2023-05-16 20:21:58 91

原创 LeetCode哈希表——代码随想录

这个方法就是我们常说的「双指针」,当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法,将枚举的时间复杂度从 O(N2) 减少至 O(N)。这是因为在枚举的过程每一步中,「左指针」会向右移动一个位置(也就是题目中的 bbb),而「右指针」会向左移动若干个位置,这个与数组的元素有关,但我们知道它一共会移动的位置数为 O(N)均摊下来,每次也向左移动一个位置,因此时间复杂度为O(N)。时间复杂度O(n^2) ,空间复杂度O(n)。

2023-05-16 20:09:14 89 1

原创 LeetCode链表——代码随想录

还可以利用环的性质,如果存在环,则一快一慢指针向后遍历一定会在环中相遇,而相遇的点与环的入口存在关系,如下图所示,(x + y) * 2 = x + y + n (y + z),则可以得到 x = n (y + z) - y 或 x = (n - 1) (y + z) + z,表示如果一指针从头节点走,一指针从相遇点走(步长都为1),则一定会在入口相遇,即可得到环的入口节点。,让两指针遍历完自己的指针后在遍历对方的,如果相交,则在交点相遇,如果不相交,则返回null。时间复杂度O(n),空间复杂度O(n)

2023-05-16 20:06:09 75

原创 LeetCode数组——代码随想录

当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。递归算法的时间复杂度本质上是要看:。**那么思考一下 什么时候空间复杂度是 O(logn)呢?递归 **相当于从头加,用first和second来记录当前的两个数值,而不是重复计算同样的值。时间复杂度为O(2^n),大量重复计算。空间复杂度就是O(n)。(递归深度为O(n))

2023-05-16 19:50:23 74 1

原创 生成素数表,判断素数的方法

从i*i 开始是因为它之前的合数 i * (2 ,3,…, i-1)已经被2 ,3,…, i-1算合数时筛选过了。(比如 18 = 2 * 9,prime[j]是最小质因数,i在其中充当倍数的作用)把所有素数的倍数筛去,O(nloglogn),问题是一个合数可能被多次筛选。从 2 ~ n^(1/2),一个一个试。prime[j] * 最大。i 筛一次,O(n),牛。所有合数只被自己的 最小。

2023-05-16 19:18:10 92 1

原创 XML,JSON与Java中的应用

XML与JSONXML简介可扩展标记语言(eXtensible Markup Language)。特性:xml具有平台无关性, 是一门独立的标记语言.xml具有自我描述性为什么学习XML?网络数据传输. (现在常用JSON,因为性能更好,但没有xml阅读起来清晰)数据存储 (较少,基本不用)配置文件 (常用作xm,也用properties)XML文件.xml是保存XML数据的一种方式XML数据也可以以其他的方式存在(如在内存中构建XML数据)。不要将XML语言狭隘的理解成

2020-08-15 22:54:07 199

原创 Java多线程的概念与实现

线程线程创建的两种方式+1种1.2.但是继承Thread有个很简单的实现方式,通过匿名内部类重写run()不用重新创建一个类而简单的实现了多线程每个线程都有自己的栈空间,而共用一个堆内存由一个线程调用的方法,方法指挥执行在此线程中(废话?)3 Callable实现线程的状态的返回如果调用get方法,则主线程等待其执行完成之后再执行,如果不调用则对主线程无影响可并行。FutureTask()方法Future()方法线程同步的三种方法1,同步代码块,指定锁如同一个o

2020-08-14 15:44:50 294

原创 Java11的安装与环境变量配置

Java11Java11的下载1.通过Oracle官网下载2.百度云下载安装环境变量的配置为什么要配置环境变量如何配置环境变量win10win7额外需要配置的环境变量确认Java是否安装配置成功错误及处理环境变量配置错误JDK文件出现错误Oracle已于2018年9月26日正式发布Java11, 而且如同Java8一样是LTS(长期支持)版本,Java 11 将会获得 Oracle 提供的长期支持服务,直至2026年9月,有些小伙伴可能并不知道如何下载安装Java11,下面就跟大家分享一下安装的步骤吧。

2020-07-19 18:37:54 9112 4

空空如也

空空如也

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

TA关注的人

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