自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 排序算法··

【代码】排序算法··

2022-09-18 21:08:26 153 1

原创 Redis持久化

Redis是读写操作都在内存,关机就会丢失所有的信息,所以要进行持久化保存在磁盘中,有两种持久化方式:AOF和RDB。

2022-08-09 17:14:39 306

原创 字符串匹配(华为)

代码】字符串匹配(华为)

2022-07-19 20:23:12 298

原创 树形dp

树形dp是二叉树形式的dp,本题要用个数组来保存当前节点的结果。res[0] 表示不偷当前节点 res[1]表示偷当前节点

2022-07-03 15:54:47 130

原创 不用加减乘除实现加法

此处采用位运算,a+b无进位的结果和a^b相等,0 + 1 = 1 == 0 ^ 1 = 1a+b的进位等于 (a&b)

2022-06-28 22:10:11 95

原创 SpringDataRedis

redisTemplate操作基本数据类型都是redisTemplate.opsForxxx

2022-06-28 15:24:31 57

原创 完全背包问题

完全背包问题和0-1背包问题的差别为:完全背包物品的数量没有限制,而0-1背包每个物品的数量为1个。leetcode上的变形题,不是这种纯完全背包的问题了。分为两种:1、组合问题,组合问题不讲究先后顺序,{1,5}和{5,1}是一样的2、排列问题,排列问题要注意先后顺序,{1,5}和{5,1}是两个答案典型的组合问题,不要求顺序,{1,2,2} 和{2,1,2}是一样的,组成总金额为5的数,所需一枚一块和两枚两块的,不要求顺序,所以先遍历遍历物品,再遍历背包这道题求排列数,从测试用例可看出,所

2022-06-24 18:17:01 96

原创 排序链表(归并排序)

本题要求在 O(n log n) 时间复杂度和常数级空间复杂度下。排序算法中,只有快排、堆和归并排序时间复杂度可以满足要求,但是快排时间复杂度不稳定而且空间复杂度不是常数,堆不适合链表,所以要想到归并排序空间复杂度 log n...

2022-06-22 12:48:36 679

原创 实现pow(x,n)函数

本题不能使用for循环然后相乘,会超时。本题使用了快速幂法。  利用二进制与十进制转化的方法,把n拆开。简单来说就是,n每次右移一位,x每次与自身相乘,当n的最右边为1时,res = res * x;Java 代码中 int32 变量 n \in [-2147483648, 2147483647]n∈[−2147483648,2147483647] ,因此当 n = -2147483648 n=−2147483648 时执行 n = -n ,n=−n 会因越界而赋值出错。解决方法是先将 n 存入

2022-06-10 10:21:42 285

原创 java连接redis

Redis学习

2022-06-09 20:58:48 57

原创 背包问题及应用

0-1背包问题有一个容量为w的背包,有x件物品,物品的重量为weight[i],价值为value[i],每件物品只有一个,问怎样装物品才能使背包里物品的价值最大。1、二维数组写法1、确定dp数组含义:dp[i][j]表示背包容量为j时,装0-i之间的物品所能获取到的最大价值2、确定递推公式:   当该物品的重量比背包容量大时,不能装该物品。dp[i][j] = dp[i-1][j];  背包最大价值等于背包容量为j时,装到i-1号物品时的最大价值。   当该物品可以装进去时,dp[i][j] =

2022-05-20 11:20:41 421

原创 不同路径I II

I动态规划问题解决方法:1、确定dp数组的下标和值的意义2、确定状态转移方程3、dp数组的初始化4、确定遍历的顺序5、递推结果  有关图的问题,如果出发时只能向下或向右行走,则最上面的行和最左边的列都要初始化为1.因为只有一条路径可以到达这些地方,那就是机器人横着走或者竖着走机器人所能到达的每个位置(i,j),一定是由(i-1,j)和(i,j-1)位置过来的,所以状态转移方程为dp[i][j] = dp[i-1][j] + dp[i][j-1];public int uniquePat

2022-05-17 15:49:31 69

原创 SQL优化

1、插入数据插入数据时,如果插入数据很大,尽量选择批量插入数据。手动控制事务,尽量不要频繁开启提交事务。主键尽量顺序插入,性能比主键乱序要好。大批量插入数据一次性插入百万记录,使用insert语句插入性能较低,此时可以使用load指令进行插入2、主键优化主键长度尽量短,尽量保持顺序插入。推荐使用AUTO_INCREMENT主键自增主键乱序插入会产生页分裂的问题。页分裂页合并3、order by 优化4、group by优化5、limit优化limit分页

2022-05-16 16:10:16 88

原创 Redis基本数据结构

批量插入mset k1 v1 k2 v2 k3 v3单个插入set k1 v1查看所有keys删除指定的keyexist 查看key是否存在,存在返回1 不存在返回0expire设置有效期,参数为key 和 秒ttl查看剩余有效期,ttl等于-2代表key已经不存在,等于-1代表永久有效1、String类型SETNX其实不是一个固定的命令,是因为set后可以加后缀。对应的有GETNX GETEX层级存储2、Hash类型HSET命令插入时 指定key 字段名..

2022-05-15 15:25:53 175

原创 SQL和NoSQL

1、结构化SQL数据库表中的字段类型大小都是一开始设定的,数据要插入该表必须遵守字段的约束,否则无法插入。NoSQL一般没有这个要求2、关联性SQL数据库可以设计一些外键,让该表可以与其他表的主键联系起来,数据库也会维护这些关系。NoSQL要自己维护这些关联关系,数据库不会维护这些关系。3、查询SQL查询语句一般是固定的语法结构,不管什么数据库一般情况都是变化不大NoSQL没有固定语法格式4、事务特性SQL数据库都是可以满足ACID的NoSQL无法满足ACID的全部要求...

2022-05-14 15:09:34 224

原创 单调递增的数字

看见这个数字范围就知道不可以使用暴力。这道题先要想清楚,如果不用代码写,用手算会怎么算。   举个例子:98 最大的单调递增数是多少?那97,96,95,94呢?先用暴力计算,就是从小于98的数中一个一个对比,97,96…92,91,90,89,找到了那个数就是89.剩下的那些数答案也全都是89先找一下规律,都是把前一位数-1,然后把后一位数置为9,先试一试其他数看对不对。  65最大递增的数是多少?前一位数6-1=5,后一位数置为9,那就是59。用暴力方法确认一下,64,63,62,61,60.

2022-05-13 11:35:14 157

原创 区间排序问题

代码随想录总结406.根据身高重建队列452.用最少数量的箭引爆气球435.无重叠区间763.划分字母区间56.合并区间区间问题一般都要排序,这时候要考虑是按左边排序还是按右边排序。举例:左边升序,左边相等则右边降序排序Arrays.sort(name, (o1,o2) ->{ if(o1[0] == o2[0]) return o2[1] -o1[1]; return o1[0] - o2[0];} );如果左边相等右边也是升序的话,不用if判断条件,此时Arrays.so

2022-05-12 22:27:32 565

原创 java中的锁机制

要学习java中锁的机制,首先要了解java对象头。因为锁机制的实现依赖于java的对象头。那什么是java对象头呢?当你创建一个对象时,该对象在内存中的存储布局为:其中Mark Word和类型指针就被称为对象头。MarkWord中存放的东西下面详细介绍,类型指针里存放着一个地址,指向该对象是哪个类创建的对象。Mark Word的大小为8个字节,类型指针的大小为4个字节。实例数据和对齐位的大小不一定。对齐位主要是要让该对象大小要被8整除,如果不能被整除就补位。如何查看对象各个区域所占的大小呢?导

2022-05-08 17:26:41 615

原创 java经典八股(持续更新)

1、String StringBuilder和StringBufferString的所有方法和参数都是用final修饰的,是不可变的。java中双引号括起来的字符串,例如"abc","qwe"都是存储在方法区中的字符串常量池的。此时字符串常量池中会创建"abc"这个字符串常量,new创建的所有对象都在堆内存中,此时堆中存放的是指向“字符串常量池”的内存地址,所以s1==s2为false,他们两个在堆中的地址不同。栈中存放的是指向堆的引用地址String s1 = new String("abc")

2022-05-07 14:36:03 1252

原创 分发糖果(难)

这道题思路不太好想,需要两步:1、从左往右,从1位置开始遍历数组,若当前位置分数比左边的分数大,那么糖果数等于左边的+1for(int i = 1;i<n;i++){ if(ratings[i] > ratings[i-1]){ candy[i] = candy[i-1] + 1; } }2、从右往左,从n-2位置开始,如果当前位置分数比右边的大,那么取当前位置糖果数和右边糖果数+1二者的最.

2022-05-07 11:57:25 260 2

原创 加油站(比较难)

方法一public int canCompleteCircuit(int[] gas, int[] cost) { // 油箱里油的最小值 int min = Integer.MAX_VALUE; int sum = 0; for(int i = 0;i<gas.length;i++){ // 每趟剩余的油 int rest = gas[i] - cost[i]; // 油.

2022-05-06 13:37:57 86

原创 K 次取反后最大化的数组和

本题看着跟贪心好像没什么关系,不用贪心也可以做,但是要养成贪心的思维。要找局部最优和全局最优的这种策略。翻转时的局部最优就是把最小的负数翻转为正数,全局最优就是最后的值才是最大的。所以要给数组先排序,在翻转当把数组中负数都翻转成正数以后,会出现三种情况:1、k值为0,数组中没有负数 ------ 直接求和2、k值为0,数组中还有负数 ------直接求和3、k值不为0,数组中没有负数(k不为0时,数组中一定没有负数)此时又分为两种情况:(1) k值为偶数,那么就不用翻转了(2.

2022-05-06 10:23:20 119

原创 买卖股票的最佳时机

某一天买,在后面的某一天卖,买卖只能进行一次。public int maxProfit(int[] prices) { int min = prices[0] ,res = 0; for(int i = 1;i<prices.length;i++){ if(prices[i] <min) min = prices[i]; else res = Math.max(prices[i]-min,res); .

2022-05-05 21:14:51 95

原创 MySQL索引

索引概述介绍索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。若无索引的话,查找一个数据就需要全表扫描查找该数据,效率十分低下。特点劣势都可以忽略。磁盘空间占用无所谓,一般情况磁盘都是很便宜的。增删改会降低效率主要是因为需要维护索引,往树中插入或删除节点都需要耗费时间。这点也可忽略,一般情况增删改的操作都很少,

2022-05-05 16:28:34 584

原创 MySQL存储引擎

MySQL体系结构存储引擎存储引擎是存储数据,建立索引、更新/插叙数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。默认为InnoDB。查看数据库可以支持的存储引擎 show engines;创建表示需要指定存储引擎,不指定默认为InnoDBcreate table m( id int, name varchar(10)) engine = MyISAM;InnoDB 引擎MySQL 5.5之后,InnoDB是默认的存储引擎。特点:1、D

2022-05-05 14:35:38 109 1

原创 分发饼干l

贪心算法的核心思想就是每次只考虑局部最优解,从而得到全局最优。没有模板套路。1、先用小饼干满足胃口小的孩子,遍历饼干数组,使用index控制小孩数组的遍历位置public int findContentChildren(int[] g, int[] s) { if(s.length==0) return 0; Arrays.sort(g); Arrays.sort(s); int index = 0; int num =

2022-05-03 15:55:01 128

原创 N皇后问题

经典的回溯问题,只要想清楚其实很简单。依然是套模板的题首先附上代码然后再解释class Solution { List<List<String>> res = new ArrayList<>(); public List<List<String>> solveNQueens(int n) { //皇后放的位置 int pos[] = new int[n]; recur(pos,0

2022-05-03 12:39:25 214

原创 递增子序列(有坑的回溯)

本题中给的示例和题目中都有坑。可能写的代码会只能过示例给的,但是过不了全部用例(就是我)。本题不可以光套模板,很容易出错,得小心。class Solution { List<List<Integer>> res = new ArrayList<>(); LinkedList<Integer> list = new LinkedList<>(); public List<List<Integer>&gt.

2022-05-02 12:01:20 98

原创 子集问题 I II

子集问题和之前的回溯问题有个不一样的地方就是:对添加进最终集合的集合没有约束条件,递归一开始就把当前集合加入最终集合,不像其他的题,一开始先判断是否符合条件,符合再加入class Solution { List<List<Integer>> res = new ArrayList<>(); LinkedList<Integer> list = new LinkedList<>(); public List<List

2022-05-01 16:06:34 353

原创 字符串分割问题

字符串的分割也属于回溯问题,可以直接套回溯的模板来做,但是要注意题目中给的条件,难点在于写判断条件的那段代码。这道题中点在于子串的分割以及判断每个子串是否是回文串class Solution { List<List<String>> res = new ArrayList<>(); LinkedList<String> list = new LinkedList<>(); public List<List<

2022-05-01 11:35:57 249

原创 组合问题I

这几个个题其实都差不多,唯一不同的就是都是在第一题的基础上添加几个判断条件第一题是基础问题,就是传统的回溯问题,使用回溯的模板就可以解决if(退出的判断条件){ 存放结果 return;}for(){ 处理节点 recur(路径,选择列表);递归 回溯,撤销处理结果}该题的代码如下class Solution { List<List<Integer>> res = new ArrayList<>(); LinkedList&lt

2022-04-28 15:55:52 80

原创 全局变量,成员变量和局部变量

全局变量也叫成员变量,它是声明在类里,不在函数和静态语句块中声明的变量,全局变量又分为类变量(静态变量)、实例变量两种。类变量:private static int i =1;存放在方法区中,随着类的消失而消失。实例变量:private int i = 1; 若未被实例化,存放在栈中,实例化了存放在堆中。栈中放着指向堆中的引用地址。随着对象的消失而消失类变量是可以直接被类调用的,通过类名.变量就可以调用,该类的对象也可以调用。因为有static的修饰,在类加载时就会初始化,当修改该类变量时,其他使用该

2022-04-28 10:40:22 790

原创 final相关问题

final的作用1、修饰类:表示类不可以被继承2、修饰方法:表示方法不可以被子类覆盖,但是可以重载3、修饰变量:表示变量一旦被赋值就不可以更改它的值(1)final修饰类变量,只能在静态初始化代码块中指定初始值或者声明该类变量时指定初始值final修饰成员变量,可以在非静态初始化块或者声明该变量时或者构造器中执行初始值(2)修饰局部变量局部变量只能有程序员显示初始化。因此在使用final修饰局部变量时,既可以在定义时指定默认值(后面的代码无法再赋值)也可以不指定默认值,而在后面的代码中对fin

2022-04-27 22:56:55 496

原创 Spring中遇到的问题

Controller层使用Autiwored注入Service接口,但是实际上注入的是Service的实现类。ServiceImpl实现类中,使用Autowired注入Mapper。要在该类中标注@Service注解@Autowired注解和@ReSource注解:其实这两个注解的作用都一样,都是在做bean的注入,在使用过程中,两个注解有时候可以替换使用1、@Resource注解是Java自身的注解,@Autowired注解是Spring的注解.@Qualifier:的作用:在按照类型注入的

2022-04-27 22:20:16 946

原创 把二叉搜索树转换为累加树

本题看起来有点复杂,其实很简单。遇到二叉搜索树就把他认为是一个有序数组,如果是有序数组的话,[1,2,3] 转化为累加数组[6,5,3] 就很简单。所以本题需要先遍历右子树把右子树中的值进行累加,在赋值给当前节点,最后遍历左子树 int num = 0; public TreeNode convertBST(TreeNode root) { if(root!=null){ convertBST(root.right); num .

2022-04-27 16:14:20 71

原创 将有序数组转换为二叉搜索树

本题需要构造一颗高度平衡的二叉搜索树,每次都把数组中间位置的数选作跟节点,自然而然会构造出平衡的二叉树。本题和根据前序中序构造二叉搜索树和根据中序后序二叉搜索树是相同的道理。前序中序和中序后序构建二叉树递归寻找数组中间位置的数,然后将它作为根节点,再递归遍历数组左边的数和右边的数。 public TreeNode sortedArrayToBST(int[] nums) { if(nums.length == 0 || nums==null) return null; .

2022-04-27 15:53:43 480

原创 删除二叉搜索树中的节点

本题分为以下几种情况:树中没有要删除的节点返回null要删除的节点是叶子节点(左右子树都为空)直接删除要删除的节点的左子树不为空,右子树为空,返回左子树要删除的节点右子树不为空,左子树为空,返回右子树要删除的节点的左右子树都不为空,把该节点的左子树放到右子树的最左边的位置,返回右子树public TreeNode deleteNode(TreeNode root, int key) { if(root==null) return root; // 当该节点是要删.

2022-04-27 15:30:18 375

原创 二叉搜索树的最小绝对差

注意 看到二叉搜索树首先要想到中序遍历,中序遍历二叉搜索树会得到有序的序列,本题可以转化为寻找有序数组的最小差值迭代public int getMinimumDifference(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); TreeNode pre = null; int min = Integer.MAX_VALUE; while(root!=n.

2022-04-25 14:29:31 229

原创 字符串压缩

public String compressString(String S) { if(S.length()<=2) return S; StringBuilder sb = new StringBuilder(); char ch = S.charAt(0); int count = 1; for(int i = 1;i<S.length();i++){ if(S.cha.

2022-04-25 11:45:46 102

原创 路径总和I和II

本题注意用到了回溯的思想,每次递归完下一层,返回上一层后,target的值不变当遇到叶节点时判断target值是否为0,public boolean hasPathSum(TreeNode root, int targetSum) { if(root==null) return false; targetSum -= root.val; if(root.left==null && root.right==null){ .

2022-04-21 10:30:07 86

空空如也

空空如也

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

TA关注的人

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