自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1116面试

HashMap 通过 key 的 hashcode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。如果子类重写了父类的方法,真正执行的是子类覆盖的方法,如果子类没有覆盖父类的方法,执行的是父类的方法。:表示一个对象具有多种的状态,具体表现为父类的引用指向子类的实例。

2023-11-16 23:06:19 488

原创 算法记录|笔试中遇到的题

【代码】算法记录|笔试中遇到的题。

2023-11-09 10:10:16 297

原创 【无标题】

Redis是一种存储key-value的内存型数据库,它的key都是字符串类型,value支持存储5种类型的数据:String(字符串类型)、List(列表类型)、Hash(哈希表类型、即key-value类型)、Set(无序集合类型,元素不可重复)、Zset(有序集合类型,元素不可重复)。将所有就绪进程按 FCFS(先来先服务) 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。:原子性是指一个事务是一个不可分割的单位,要么全部成功,要么全部失败。

2023-10-13 13:09:00 236

原创 项目和1013

面试1013

2023-10-13 00:14:46 110

原创 JVM-满老师

JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。

2023-10-04 16:02:07 801

原创 Java并发-满老师

我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。(Program Counter Register),它的作用是记住下一条 jvm 指令的执行地址,是线程私有的。因为以下一些原因导致 cpu 不再执行当前的线程,转而执行另一个线程的代码。当 Context Switch 发生时,需要由操作系统。,并恢复另一个线程的状态,Java 中对应的概念就是。

2023-10-03 15:55:12 92

原创 【面试总结大纲】

AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。: 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。Spring的AOP是对一个类的方法在不进行任何修改的前提下实现增强,这些方法我们给起了一个名字叫。返回值越小优先级越高。

2023-10-02 21:33:53 452

原创 Day51 算法记录| 动态规划 18(单调栈)

最近大的值:需要一个单调递减的栈(大于栈顶元素就弹出)最近最小值:单调递减栈方向: 右边,从后往前遍历 左边:从头遍历。

2023-08-02 11:33:27 143

原创 Day50 算法记录| 动态规划 17(子序列)

1.动态规划和2.中心扩展这个视频是基于上面的视频的代码方法1:动态规划布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。dp[i][j] = (c[i] = c[j]) &&( (j-i

2023-07-31 23:12:13 151

原创 Day49 算法记录|动态规划16 (子序列)

这道题求得的最小步数,是这道题的变种Min(步数)=str1.length+str2.length−2∗(Max(公共字符串长度))Min(步数) = str1.length + str2.length - 2 *(Max(公共字符串长度))Min(步数)=str1.length+str2.length−2∗(Max(公共字符串长度))72. 编辑距离讲的超级好,推荐!!!dp[i][j]dp[i][j]dp[i][j]表示s1的前iii个字符和说的前jjj个字符相同所需要的最小的步数``总结

2023-07-31 18:27:48 310

原创 Day48 算法记录|动态规划15 (子序列)

dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。初始化,如果t表示空,那么在s中只有一个子集,

2023-07-30 13:25:26 275

原创 Day47 算法记录|动态规划14子序列

(1)dp[i-1]<0,不能加,dp[i] =nums[i] (2)dp[i-1]>0,dp[i] =dp[i-1] + nums[i]以绘制连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且直线不与任何其他连线(非水平线)相交。这道题和718. 最长重复子数组的区别:这道题的。以及nums[i],所以,如果全为正数的化。和上面一道题一摸一样。

2023-07-30 11:21:45 182

原创 Day46 算法记录| 动态规划 13(子序列)

------ 第二层for循环找到当前元素前面有几个小于该值的元素。因为当前元素依赖于(x-1,y-1),所以就需要从后向前去遍历。:动态规划:dp[i]表示前面有几个连续小于当前位置的值。相当于在二维空间里面,从最后一行开始遍历。第一层for循环遍历每一个元素,结尾需要统计最多的个数。

2023-07-29 11:41:33 310

原创 Day45 算法记录| 动态规划 12

309.最佳买卖股票时机含冷冻期。

2023-07-29 09:52:25 106

原创 Day44 算法记录| 动态规划 11 (股票问题)

在只能进行一次股票交易,贪心算法,从前往后遍历,记录最底的价格以及最高的利润。:0表示no-action, 1-k表示交易的次数。:0表示买入,buy;1 表示卖出, sold。dp[天数] [交易次数][交易状态]

2023-07-27 11:56:26 123

原创 Day 43算法记录|动态规划 10(股票)

了(注意只有一只股票,所以再次购买前要出售掉之前的股票)hold[ ] 和 sold [ ] 可以用dp[ ][0] 和dp[ ][1]表示。改进:dp[0]表示持有,dp[1]表示当天卖出的最大利润。和121相比,这道题是可以多次购买,代码区别。本题和121的唯一区别是本题股票可以。当天的卖与不买的收益只与前一天有关。

2023-07-25 16:41:52 74

原创 Day 42 算法记录|动态规划 09 (打家劫舍)

3.初始化,dp[0] 和 dp[1],dp[0] 一定是 nums[0],dp[1] = max(nums[0], nums[1]);每个节点是否选择,取决于其左右子节点(所以只需要记录临近节点的状态,其余就不用管,就像上一道里面的上一个,上上个)3.遍历顺序,dp[i] 是根据dp[i - 2] 和 dp[i - 1] 推导出来的,那么一定是从前到后遍历!从根节点开始遍历,分为两种情况,偷当前节点和孙子节点,不偷当前节点,偷孩子。dp[0],dp[1]分别表示当前节点没有被选中,和被选中。

2023-07-25 11:52:47 226

原创 Day 42算法记录| 动态规划 08

把这五部都搞透了,算是对动规来理解深入了。确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组2.遍历顺序一维:第二层的背包是从大到小注意for循环分别表示的含义。

2023-07-24 16:10:28 89

原创 Day 41 算法记录|动态规划 07

4.确定遍历顺序:1、2 步 和 2、1 步都是上三个台阶,但是这两种方法不一样!2.凑满金额有最少个数,min{添加当前金额,不添加当前金额}2.装满背包有几种方法,dp[i] += dp[i - j]1.dp[i]:爬到有i个台阶的楼顶,有dp[i]种方法。1.dp[i]:凑到金额i,有最少需要dp[i]个硬币。m阶就是物品,楼顶就是背包。排列:顺序很重要, 先背包再物品。组合:不同的组合,先物品再背包。4.确定遍历顺序:金额个数,,先遍历背包,在遍历物品。1.先物品,就是存放。

2023-07-23 19:56:19 162

原创 Day 40算法记录|dp完全背包问题 06

因为01里面的,选择当前商品时,从大到小遍历,dp[j - coins[i]]表示前(i-1)种物品被选中的情况。完全里面,选择当前商品时,一个物品可以选多次,所以dp[j - coins[i]]表示当前商品以前也可以被选择。(1).选 dp[j-coins[i]] (2).不选,dp[j]2.递推公式:dp[j] += dp[j - coins[i]];1.是组合数:dp[j]:凑成总金额j的货币组合数为dp[j]就是外层for循环遍历物品,内层for遍历背包。所以就是for循环背包,再循环物品。

2023-07-22 16:00:06 54

原创 Day 39算法记录| 背包问题 05

讲的很好最小可能重量:1.剩余0,就可以看成两个完全相同的背包问题2. 剩余不是0,要越小越好 = half(+) - half(-) ,这样就可以返回越小的值从stone中选择石头,使得<=背包容量1.二维数组i <= n;i ++) // 遍历商品 for(int j = 1;j <= half;j ++) {//背包容量 int cur = stones [ i - 1 ];// 装不下 dp [ i ] [ j ] = dp [ i - 1 ] [ j ];

2023-07-22 11:21:13 52

原创 Day 38算法记录|动态规划 04

就是dp[3][11] 里面装的11,那对应的dp[i - 1][j - nums[i]] = dp[2][6]也装满了,就是【1,5,5】dp[i][j]表示从数组的 [0, i] 这个子区间内挑选一些正整数 , 每个数只能用一次,使得这些数的和恰好等于 j。只有把这个包装满,才算true, 包的容量是sum/2 ,所以有两种情况,选不选当前商品。初始化:dp[0] = true;dp[i]表示当前背包容量为。关键点:这道题要倒着写。

2023-07-20 19:49:04 61

原创 Day 37算法记录|动态规划 03

第一个max: max((i - j) * j, dp[i - j] * j),表示在当前j下,拆分和不拆分选最大的。递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));2:j * dp[i - j],相当于是拆分(i - j)。外面的max:不同的j下,是上一次的大还是当前的大。1:j * (i - j) 直接相乘。确定递推公式:得到dp[i],是因为j是从1开始遍历的。

2023-07-20 16:16:03 67

原创 Day36算法记录|动态规划 dp02

dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。,dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,dp[0][j]也同理。,求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。很容易忽略了障碍之后应该都是0的情况。

2023-07-19 15:17:58 817

原创 Day35 算法记录|动态规划01

记忆法(也称备忘录)是一种优化技术,通过存储函数调用结果(通常比较昂贵),最简单的递归:(时间复杂度= 递归调用次数 x 单次函数的时间 )dp[ ] 数组里面装的东西和cache[ ]数组装的是一样的。这道题目我举例推导状态转移公式了么?记忆法是动态规划的一种情况,强调的是。打印出来了dp数组和我想的一样么?(用一维数组存储之前计算过的元素)递归—记忆法优化—自顶向下的递归。我们想要的是自底向上的dp(我打印dp数组的日志了么?

2023-07-18 16:20:57 64

原创 Day 34 算法记录|贪心算法06

代码随想录。

2023-07-17 11:55:37 53

原创 Day33算法记录|贪心算法05

(因为两道题有一点点差异,所以在判断的时候一个是<,另一个是<=。2. 当索引值和当前最大的end相等的时候就可以截断为一个区间。1.利用map记录每个字母最后出现的位置。对每个区间的起点和终点分别排序。,气球是找出没有重叠的区域,有。

2023-07-16 15:43:40 38

原创 Day 32 算法记录|贪心算法

局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性。局部最优:当气球出现重叠,一起射,所用弓箭最少。全局最优:把所有气球射爆所用弓箭最少。情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5。先按照末尾升序,如果前一个的尾部小于后一个头部,则需要新的。全局最优:最后都做完插入操作,整个队列满足题目队列属性。情况二:账单是10,消耗一个5,增加一个10。维护三种金额的数量,5,10和20。排列,若身高相同,比第二个属性,情况一:账单是5,直接收下。

2023-07-15 23:23:19 44

原创 Day31算法记录|贪心算法03

对数组进行升序排序,首先依次遍历每一个负数(将负数修改为正数),再遍历所有的数(将 000 或最小的正数进行修改)。局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。如果第i个加油站能到达第j个加油站,说明剩余的油量是大于等于0的。第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完。第一步:将数组按照绝对值大小从大到小排序,注意要按照。第二步:从前向后遍历,遇到负数将其变为正数,同时K–

2023-07-13 16:46:15 46

原创 Day 30 算法记录|贪心算法(2)

边界问题,考虑第一天结束后,hold[1] = -p;sold[1] = sold[0], 所以就需要hold[0] = Integer.MIN_VALUE。相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。因为可以多次购买,所以就只在有上涨的时段购买和抛售,累加起就是我的收益。所以如果只计算到倒数第二步,如果curmax也恰好框到这里,就直接加1。如果存在0,jump[i] = 0+i;

2023-07-12 14:25:32 33

原创 Day 29算法记录|贪心算法 01

那么就应该从 nums[i+1]开始从 0 累积 count 了,因为已经变为负数的 count,只会拖累总和。从代码角度上来讲:遍历 nums,从头开始用 count 累积,如果 count 一旦加上 nums[i]变为。局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。result 要初始化为最小负数(以防输入的数组全是负数)是先遍历的胃口,在遍历的饼干。

2023-07-10 15:30:48 42

原创 Day 28算法记录|回溯

我的总结:参考了:利用HashMap和LinkedList,这个map:键保存起始地,值装一个优先队列51. N 皇后java版本讲得很好:方法二:对其中的col和pie和na都同时表示是否被前面的皇后映射到了,所以就可以用数组表示这个讲的很暴力函数1:需要dfs回溯(按照行),函数2:需要检查该点的上面的和左上,右上是否有皇后,函数3:把char数组board变成一个list数组board变成一个list37.数独1.首先找到’.'的坐标,再依次添加1-9判断是否合法代码随想录得题解

2023-07-10 12:54:54 34

原创 Day 27算法记录|回溯-分割/排列

递归下一层递归的startIndex要从i+2开始(因为需要在字符串中加入了分隔符.)数组 nums ,其中可能包含重复元素,解集 不能 包含重复的子集。组合:是到最后一个叶子节点了,才放入结果集中。上一道回文字符串和这道题目类似。排列:每一个节点的值都要放入。段位以0为开头的数字不合法。段位里有非正整数字符不合法。段位如果大于255了不合法。这是全排列问题,和前面。

2023-07-05 17:41:03 36

原创 Day 26算法记录|回溯(组合)

没有提前sum = sum + candidates[i],再把sum调入递归函数,这样子就少了弹出之后, sum = sum- candidate[i]这一步。队列: path.add( xx ) 和 path.removeLast( xx ) 这个一直在尾部操作。如果是多个集合取组合,各个集合之间相互不影响,那么就不用startIndex(如17)栈:path.push(xx) 和path.pop( )这个一直在头部操作。如果path需要的结果集的顺序很重要的话,就会报错。

2023-07-04 15:49:10 51

原创 Day 25算法记录|回溯-组合

相比于77题,多了一步剪枝的操作是,如果 sum>targetsum,就可以直接结束。就是9 - (k - path.size()) + 1。个,所以最多取到倒数第。

2023-06-28 15:49:08 55

原创 Day 24回溯|组合-组合

例子,n = 4,k = 4的话,那么第一层for循环的时候,从元素2开始的遍历都没有意义了。在第二层for循环,从元素3开始的遍历都没有意义了。所以就是还需要的个数 = k(需要的个数) - path.size()(path中已有的个数),回溯部分的模板:1.选择(树层) 2.递归(树枝方向) 3.撤回选择。例如:第一层,需要 4个=4-0,i最高只能取到1。for循环用来横向遍历,递归的过程是纵向遍历。回溯:向下的树枝部分从当前节点的下一个结点开始。第二层:需要3个=4-1,i 最高只能取到 2。

2023-06-28 09:36:47 42

原创 Day 23|回溯(全排列)

对于同一树层,不能出现相同的元素(used[i-1]==false,因为回溯之后会把对应的used设为false)回溯是一个增量构造答案的过程(这个过程用递归实现)1.进行选择 2.递归 3.撤回选择。其中的depth其实就是stack的大小。

2023-06-27 14:17:46 48

原创 Day 22|二叉搜素树(剪枝)

3.单层循环:中间节点作为根节点,前面的就作为左子树,后面就是右子树。关键:找到根节点,以及对应的索引,确定哪一块表示左子树和右子树。2.处理左子树(此时根节点在范围内,所以左边只有小于low)用二分法,先找到中间节点,前面的就作为左子树,后面就是右子树。1.反反复复处理根节点,直到根节点在目标范围内。满老师这两道题也用了这个思路,叫做上下限递归。3.处理右子树(只考虑大于high的情况)方法二:反中序遍历(右我左)----迭代。求范围和-力扣 938 题。方法一:递归(分治法)方法一:分治法(同上)

2023-06-26 11:00:50 47 1

原创 Day21|算法记录

要删除某节点(称为 D),必须先找到被删除节点的==父节点( Parent)==和。找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。搜索树是有方向了,可以根据插入元素的数值,决定递归方向。先用一个类似指针找到应该插入的位置,标记父节点;(建立新的节点和之前的父节点之间的父子关系)判断节点与目标值的大小,决定往那个方向便宜。二叉搜索树的中序遍历就是一个有序的数组。终止条件,遍历到空节点直接返回。单层递归逻辑:上述的五种情况。3. 确定单层递归的逻辑。三要素:返回值和形参,

2023-06-25 11:53:59 23

原创 Day20|算法记录

2.求出最大值之后,再将对应的节点放入数组中。方法一:中序递归(和98题的区别不大)二叉搜索树的中序遍历结果就是有序。1.找到出现次数的最大值。方法一:中序遍历-递归版。方法二:中序遍历-迭代版。方法二:中序非递归实现。

2023-06-21 17:28:59 21

空空如也

空空如也

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

TA关注的人

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