自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode116 填充每个节点(完美树)的下一个右侧指针

填充每个节点的下一个右侧节点指针>>层序遍历:回想一下二叉树的层次遍历,用广度优先实现的时候,就是层层遍历,每层临时遍历的节点都会放到一个队列中。队列中保存了第i层节点的信息,我们利用这个特点,将队列中的元素都串联一遍就可以了。 //填充每个节点的下一个右侧节点指针 //回响一下二叉树的层序遍历,用广度优先实现的时候,就是层层遍历 //每层临时遍历...

2020-04-30 20:00:37 334

原创 LeetCode129 求根到叶子节点数之和

求根都叶子节点数字之和: 递归回溯 public int sumNumbers(TreeNode root){ // return helper(root,0); } public int helper(TreeNode root,int i){ if(root==null) return 0; int ...

2020-04-30 19:51:14 109

原创 LeetCode114 二叉树展开为链表

二叉树展开为链表>>>class Solution { public void flatten(TreeNode root) { if(root == null){ return ; } //将根节点的左子树变成链表 flatten(root.left); ...

2020-04-30 19:41:10 132

原创 LeetCode109 将有序链表转换为二叉搜索树

将有序链表转换为二叉搜索树>>>采用二分查找法:和数组的类似,将链表分为两部分,左边的为左子树,右边的为右子树`package JDFS;import java.util.ArrayList;import java.util.List;/** * @Author Zhou jian * @Date 2020 ${month} 2020/4/30 00...

2020-04-30 19:20:47 150

原创 LeetCode98 验证二叉搜索树

验证二叉搜索树>>>思路一:二叉搜索树中序遍历为递增数组,因此可以这样判断。 //利用特征: //二叉搜索树的中序遍历为升序遍历 public boolean isValidBST(TreeNode root) { if (root == null) return true; List<Integer> ...

2020-04-30 19:05:55 158

原创 LeetCode105/LeetCode106 根据中序遍历与前序遍历(或后序遍历)重构二叉树

注意可以从 前序与中序遍历中重构二叉树或中序遍历与后序遍历中重构二叉树首先,我们要明白二叉树的遍历方式为前 中 后 与层序遍历,其中前三种为dfs。前序遍历为根节点 ----->左子树----->右子树的顺序中序遍历为左子树----->根节点----->右子树的顺序后序遍历为左子树----->右子树------>根的顺序只要给出的遍历中有...

2020-04-29 19:16:41 180

原创 树算法的套路框架---递归DFS

树算法的套路框架二叉树算法:设计的总路线:明确一个节点要做的事情,然后剩下的事抛给框架void traverse(TreeNode root){//root 需要做什么?在这做//其他的不需要root操心,抛给框架traverse(root.left);traverse(root.right);}Demon01:如何把二叉树所有节点值加1void plusOne(Tree...

2020-04-28 15:29:43 258

原创 操作系统之进程与管理

进程基本概念进程定义进程组成PCB信息(操作系统对进程管理所需的地方,和进程管理有关的信息)进程组织(多个进程)链接方式索引方式进程的特征进程的状态与状态之间的转换进程的状态进程状态的转换进程控制什么是进程控制如何实现进程控制进程控制相关的原语小结进程通信什么是进程通信进程通信—共享存储进程通...

2020-04-27 23:25:32 1622

原创 操作系统之概述

操作系统的运行机制操作系统内核(原子性就包含在这里和Java结合分析)中断和异常系统调用(比较重要)系统调用和库函数系统调用背后的过程...

2020-04-27 21:06:36 115

原创 LeetCode279完全平方数(递归/动态规划(DFS)+(广度优先搜索BFS)

完全平方数>>>思路一:就是搜索问题,在数据中查找满足某种条件的组合,根据组合问题则可以采用递归+回溯的深度优先搜索算法 /** * 回溯法: * 相当于一种暴力法:考虑所有的分解方案,找出最小的解 * 超出时间限制 */ public int numSquares(int n) { return nu...

2020-04-27 18:50:21 314

原创 LeetCode784 字母大小写全排列

字母大小写全排列>>>这一类搜索问题是在一颗隐式树上进行搜索的问题,即树形问题.因此,先画出递归树是十分重要的,然后看着图形把代码写出来问题所求的解,就是这颗树的叶子节点的值,因此,可以使用深度优先遍历,得到叶子节点的值,这样的算法也叫回溯算法回溯算法的显著特征是状态重置,而由于字符串在拼接过程中,每次都产生新字符串,因此,在叶子节点处,直接保存即可packa...

2020-04-27 15:34:28 271

原创 LeetCode93复原IP地址

复原IP地址>>>package BDyNamicProgramming;import java.util.ArrayList;import java.util.List;/** * @Author Zhou jian * @Date 2020 ${month} 2020/4/26 0026 17:34 * 复原IP地址 */public clas...

2020-04-27 15:26:48 175

原创 LeetCode131分割回文串

分割回文串>>>思考如何根据这颗递归树编码:每一个节点表示剩余没有扫描到的字符串,产生分支是截取了剩余字符串的前缀产生前缀字符串的时候,判断前缀字符串是否是回文:* 如果 前缀字符串是回文,则可以产生分支和节点* 如果前缀字符串不是回文,则不产生分支和节点,这一步是剪枝操作在叶子节点是空字符串的时候结算,此时根节点到叶子节点的路径,就是结果集里的一...

2020-04-27 15:22:27 130

原创 LeetCode51 N皇后

N皇后>>>package BDyNamicProgramming;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @Author Zhou jian * @Date 2020 ${month} 2020/4/26 0026 14:22 * ...

2020-04-27 15:13:27 157

原创 01在阿里云服务器上安装Redis

参考Redis的安装目录: usr/local/redis在redis目录下有个binredis.conf:redis配置文件redis-server:启动redisredis-cli:客户端连接redis常用命令服务端开启redis:./bin/redis-server ./redis.conf客户端连接redis:/usr/local/redis/bin/re...

2020-04-27 12:02:32 168

原创 LeetCode17电话号码组合

电话号码的组合递归+回溯:对于按下的每个键,采用递归加回溯的方法package BDyNamicProgramming;import sun.dc.pr.PRError;import java.util.ArrayList;import java.util.List;/** * @Author Zhou jian * @Date 2020 ${month} 2...

2020-04-26 21:13:00 187

原创 LeetCode90 子集(数组中包含重复元素)

LeetCode90 子集(数组中包含重复元素)递归+回溯:关键是如何进行剪枝,和之前的数组的组合和排列类似,在本层数据不能存在重复(第一个数据可以)package BDyNamicProgramming;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @Auth...

2020-04-26 21:06:29 179

原创 LeetCode78 子集

子集>>>递归加回溯,不需要剪枝什么操作,每次递归都向结果中添加数据package BDyNamicProgramming;import com.sun.org.apache.bcel.internal.generic.LUSHR;import java.util.ArrayList;import java.util.List;/** * @Auth...

2020-04-26 21:03:30 143

原创 LeetCode60 第k个排列

第k个排列》》》暴力法:求出数组的所有排列,然后求其第k个排列即可递归回溯:在递归的过程中进行剪枝,若在这条路径中不会出现答案则进行剪枝,跳过即可;/**** 使用力扣第46题:全排列,即使用回溯搜索思想,依次得到全排列,输出所求的第k个全排列* 但事实上,我们不必求出所有全排列,基于以下几点考虑:* 1、我们知道所求排列一定在叶子结点处得到。事实上,进入每一个分支的时候...

2020-04-26 20:57:54 204

原创 LeetCode47 全排列(数组中包含重复元素)

全排列》》》递归+回溯:为什么会产生重复,因为数组中存在重复元素,需要进行剪枝,对数组进行排序,若在本层遍历的过程中,除了第一次出现的元素之后出现则进行剪枝;这和重复元素集合进行组合类似组合出现重复元素package BDyNamicProgramming;import DString.Problem3;import java.util.ArrayList;impor...

2020-04-26 20:49:55 447

原创 LeetCode46全排列(数组中不含重复元素)

全排列>>>回溯加递归:每次选择都是从之前选择好的数据中排除,再次进行选择,因此需要一个数组标记,已经选择了哪些数据,若之前选过,则剪枝跳过;使用编程的方法得到全排列,就是在这样的一个树形结构中进行编程,具体来说,就是执行一次深度优先遍历,从树的根结点到叶子结点形成的路径就是一个全排列。package BDyNamicProgramming;import ja...

2020-04-26 20:41:08 254

原创 LeetCode40 组合总和(组合中含有重复元素)

组合总和>>>这道题,采用递归+回溯,关键是需要进行剪枝,解集中不能包含重复组合,怎么剪枝呢,画出隐形回溯树可以发现,若同一层的递归数据相等则除了相同数据第一次出现外,其他则跳过这条路径(必须基于数组是排序的);continu为小剪枝,break为大剪枝package BDyNamicProgramming;import sun.reflect.generics....

2020-04-26 20:15:20 332

原创 LeetCode39 组合总和的所有情况)

组合总和的所有情矿》》》数组中的元素不重复同时数组中的元素可以重复取,这种从一个集合中挑选元素的方法来满足某种条件的问题。一般可以选用递归+回溯,选择了一个条件并在这个条件下走下去,若发现满足题目的要求,则这条路径可以作为一种可能,若走不下去则不能。这条路径走完了,接着走另外的一条路;同时可以进行剪枝,`当前的情况下一定不满足最终的结果,不必再走了;搜索问题一般复杂度较高,能剪枝就尽量剪...

2020-04-26 19:53:46 156

原创 LeetCode77 组合(求数组(不含重复元素)的所有情况的组合)

不含重复元素的所有组合的情况>>>集合中元素组合的所有可能:集合中的数据不重复,需要穷举,可以采用递归+回溯的方法;分析回溯算法,常常需要画图来帮助我们理清思路和寻找边界问题:递归什么时候截止,什么时候可以进行剪枝package BDyNamicProgramming;import java.util.ArrayList;import java.util.Li...

2020-04-26 19:36:14 411

原创 深度优先搜索之回溯算法小结

回溯算法回溯指的是状态重置,可以理解为回到过去,恢复现场是在编码的过程中,是为了节约空间而使用的一种技巧,而回溯算法其实是深度优先遍历特有的一种现象。之所以是深度优先遍历,是因为我们要解决的问题通常是在一颗树上完成的,在这颗树上搜索需要的答案,一般使用深度优先遍历回溯算法基本框架解决一个回溯问题,实际上就是一个决策 树的遍历过程,一般来说我们需要解决三个问题路径:也就是已经做出的选...

2020-04-26 19:22:17 831

原创 LeetCode375猜数字大小

猜数字大小>>>package BDyNamicProgramming;/** * @Author Zhou jian * @Date 2020 ${month} 2020/4/24 0024 15:30 */public class Problem375 { /** * * @param n * @retur...

2020-04-24 18:51:32 170

原创 LeetCode357 计算各个位数不同的数字

计算各个位数不同的数字的个数>>>状态dp[i]为长度为i位的所有数字不同的个数=长度为i-1位所有数字不同的个数*剩余可以选择的个数package BDyNamicProgramming;/** * @Author Zhou jian * @Date 2020 ${month} 2020/4/23 0023 16:07 *计算各个位数不同的数字的个数...

2020-04-24 18:48:49 325

原创 LeetCode132 分割回文串

分隔回文串>>>dp[i]为字符串的前i个字符至少需要切几刀,则对于前i个字符串从前往后遍历每个位置j,若 j+1~i位置为回文的,则进行判断min(dp[j]+1,dp[i]),则可得到状态转移方程:dp[i]=min(dp[j]+1,dp[i])/*** 状态dp[i]:表示前缀子串s[0:i]分割成若干个回文子串所需要的最小分割次数* 思考的方向是:* ...

2020-04-24 18:44:54 320

原创 LeetCode368

最大整除子集》》》对数组进行排序,状态转移dp[i】前i个元素的整除的最长长度;状态转移方程:dp[i] = Math.max(dp[i], dp[j] + 1) if(nums[i]%nums[j]==0)记录最长的dp[i]以及其对应的index位置,之后遍历数组进行存取 public List<Integer> largestDivisibleSubset1(...

2020-04-24 18:39:32 148

原创 LeetCode376摆动序列

摆动序列》》》这道题,求摆动序列的最长长度和之前做过的一道求序列的最长上升子序列类似,不同的是本题无法用一个数组来记录以i结尾的最长上升子序列,因为摆动数组的每一个元素既可以是最长摆动子序列下降后的元素,也可以是上升后的元素因此,可以用两个数组维护,最长上升子序列与最长下降子序列,对于当前元素进行判断,若nums[i]-nums[j]则应该从nums[j]所处的下降序列中找最长 ...

2020-04-24 18:33:30 131

原创 LeetCode343 整数拆分成乘积最大的值

整数拆分dp[i]为数i的最大整数拆分,则F(n)=max{i∗F(n−i)},i=1,2,...,n−1,上述表达式是表明n - i需要继续分解的情况,但如果n - i比F(n - i)要大,显然就不用再继续分解了。故我们还需要比较i * (n - i)与i * F(n - i)的大小关系。所以完整的表达式应该为:F(n)=max{i∗F(n−i), i∗(n−i)},i=1,2,...,...

2020-04-22 21:00:24 456

原创 LeetCode338比特位计数

比特位计数>>>dp[i]为当前数的比特位数,若i为奇数则dp[i]=dp[i-1]+1,若i为偶数则dp[i]=dp[i/2]package BDyNamicProgramming;/** * @Author Zhou jian * @Date 2020 ${month} 2020/4/22 0022 17:59 * 给定一个非负整数 num。对于 0...

2020-04-22 20:56:22 140

原创 LeetCode646 最长对数链

最长对数链>>>和LeetCode300的思路一样,先对数组进行排序,按照数组中第一个元素进行排序。dp[i]表示以pairs[i]这个数对作为结尾的最长链的长度,最小为1, 状态转移方程dp[i]=Max(if(pairs[i][0]>pairs[j][1]:dp[j]+1 ;先保证`pairs[j]结尾的链加上pairs[i]还是符合题意package BD...

2020-04-22 20:52:44 161

原创 LeetCode673 最长递增子序列的个数

最长递增子序列的个数>>>在leetcode300的基础上进行加强,求最长子序列的组合,添加个数组即可package BDyNamicProgramming;import DString.Problem3;import java.util.Arrays;/** * @Author Zhou jian * @Date 2020 ${month} 202...

2020-04-22 20:38:27 153

原创 LeetCode300 最长上升子序列

最长上升子序列>>>状态定义:dp[i]的值代表nums前i个数字定位最长上升子序列长度,转移方程:设j在[0,i)是,考虑每轮计算最新dp[i]时,遍历[0,i)列表区间,做以下判断: 1、nums[i]>nums[j]时:nums[i]可以接在nums[j]之后,此情况下最长上升子序列长度为dp[j]+1,2、nums[i]<=nums[j]时:nums[i...

2020-04-22 20:35:46 195

原创 HTTP协议详解

2020/4/22 阅读《图解HTTP》笔记整理主要记录HTTP的一些重要内容报文格式状态码HTTP安全HTTP新特性1、与HTTP协议密切的协议:IP、TCP、DNS这其实就是:一次网页访问过程中使用到哪些协议DNS:它提供域名到IP地址之间的解析TCP:传输控制协议,确保数据的安全到达IP:IP间的通信依赖MAC地址,在网络上,通信的双方在一个局域网的情况很...

2020-04-22 13:52:53 1040

原创 LeetCode279 完全平方数

完全平方数>>>> dp[i]为数字i的最少完全平方数,则其前一个状态dp[i-j*j],状态转移方程为dp[i]=Math.min(dp[i-j*j))+1package BDyNamicProgramming;/** * @Author Zhou jian * @Date 2020 ${month} 2020/4/21 0021 18:03 */...

2020-04-21 21:19:10 195

原创 LeetCode322零钱兑换

零钱兑换dp[i]为i元至少需要多少个硬币个数,则其前一个状态位使用现有硬币的情况下至少需要多少硬币 dp[i-coins[j]],dp[i]=min(dp[i-coins[j]+1package BDyNamicProgramming;import AarrayProblem.Problem1;/** * @Author Zhou jian * @Date 2020 ${...

2020-04-21 21:13:36 133

原创 LeetCode0801 三步爬楼梯

三步爬楼梯>>>dp[i]为爬到第i阶的方式,爬到i阶的前一个状态可能为 dp[i-1],dp[i-2],dp[i-3]这三种,状态转移方程dp[i]=dp[i-1]+dp[i-2]+dp[i-3],初始值dp[0]=0,dp[1]1package BDyNamicProgramming;import Ggreedy.Problem1403;/** * @A...

2020-04-21 21:08:18 182

原创 LeetCode1716数组中不相邻数据和的最大值

联结dp[i]为0-i数组中不相邻数据的最大值,对于i个数据可以取也可以不取,若取的话则值为 dp[i-2]+nums[i],若不取的话则dp[i-1]则状态转移方程dp[i]=Max(dp[i-1],dp[i-2]+nums[i]);初始值dp[0]=nums[0],dp[1]=Max(nums[0],nums[1])package BDyNamicProgramming;/**...

2020-04-21 21:02:46 1231

空空如也

空空如也

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

TA关注的人

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