- 博客(46)
- 收藏
- 关注
原创 操作数组->数据偏移
要移动数组的元素时,可以用特定存储结构中封装的函数,eg:LinkedList 或者Queue。可以用指针代表偏移量,每次移动都用改变偏移量来代表。offset 代表起点偏移值。
2025-07-24 10:49:00
149
原创 类型转换Java
/ 输出 "123"但是如果char不是数字(比如是字母),就不能用这种方式,要用下面的方式。// 如果想把char的2转换成int的2,就要+'0'Java 的基本数据类型对应的包装类大多都有。// 会把t1当作ASCII 码值。
2025-04-11 14:37:30
302
原创 封装方法的辨析
其他的不是n就是logn(包括TreeMap)数组没有,但是转换成list就可以用了。HashSet和HashMap(String是 O(m*n)时间复杂度均为 O(n)
2025-04-09 22:14:44
302
原创 力扣-股票买入问题
次交易后持有股票的最大利润。在初始状态,持有股票意味着你花钱买入了股票,此时的利润应该是负数(扣除了买入股票的成本),而不是 0。次交易完成后未持有股票的最大利润。当还未开始进行任何有效的股票买卖操作时,也就是处于初始状态,此时没有持有股票且利润为 0。因为卖出的股票不能是前一天买入的了,所以不能-1要用合理时间的股票。如果有冷冻期,就修改状态转移方程。dp元素代表最大利润。
2025-03-09 20:51:45
306
原创 滚动数组及优化
每一行从后往前处理,则我们就可以实现用上一行和上一行的前一个元素相加,得当前元素。注意到对第 i+1 行的计算仅用到了第 i 行的数据,因此可以使用。每处理下一行,就添加一个0(因为两行之间元素总数只差1)用一个数组存结果,不断覆盖实现记录下一行的值。不用滚动数组:就把每行元素存进List里。的思想优化空间复杂度。
2025-03-09 16:38:48
271
原创 力扣-字符串
简单理解,放大s的概念,如果s可以由重复子串构成,那说明s中至少由两个相同字串,那么str = s+s也一定能由重复字串构成,str则至少有4个相同字串,去掉首尾字符,相当于破坏了第一个s的字串1,留下字串2,破坏了第二个s的字串2,留下字串1(本质上就是将s的两个字串中改变顺序,将后一个字串拿到前面)那么剩下的两个字串,如果能构成s(也就是题主说的包含原来的s),那说明s确实是由重复子串构成。这里注意一个概念,把s的概念放大,不要去纠结s的具体组成字符。同样的方法可以用在其它的近似值计算中。
2025-03-05 21:52:04
648
原创 字符串--子串匹配
下面给出了子串匹配问题的模板,预处理结束后的代码根据题意编写。数组元素表示从从位置 i 开始往后字符 j 第一次出现的位置。预处理目的:得到26个字母在字符串t中首次出现的位置。横坐标的每个点代表一个字母。
2025-03-03 22:04:04
250
原创 list的两个实现类
适用于需要频繁进行插入和删除操作,尤其是在列表的头部或尾部进行操作。二者的用法基本一致,只是时间和空间复杂度不同。:适用于需要频繁随机访问元素。
2025-03-03 20:05:19
384
原创 力扣-贪心
这道题因为只有动1格才有cost,所以只要离目标位置的距离是奇数,就只需要1个cost(奇数-1 = 偶数,不消耗cost)但是int need = (correct.charAt(0) - current.charAt(0))这样却可以运行。但因为不是奇数就是偶数,所以奇数的个数只在两个数之间变动,那么选一个位置让奇数取两个数的较小者就行。但我们不找位置,而是统计奇数和偶数的个数,选一个最小数作为奇数的个数即可。// 输出 "123"利用对键进行排序的特点,可以替代打包(比如,背包问题,区间调度)
2025-02-28 01:57:16
329
原创 算法很美笔记(Java)——动态规划
解重叠子问题(当前解用到了以前求过的解)形式:记忆型递归或递推(dp)动态规划本质是递推,核心是找到状态转移的方式,也就是填excel表时的逻辑(填的方式),而后代码就按填表的逻辑写即可可以先写递归解法,发现有很多重叠子问题时,再改dp递归是从大规模到小规模,记忆型递归或dp都是小规模到大规模大多数情况,题中要求什么,dp的值就代表什么,比如求最大长度,dp值就是最大长度。
2025-02-21 19:49:54
1255
原创 算法很美笔记(Java)——树(题)
不应该返回1,而应该返回3,因为根节点不是叶子节点,所以不能返回1。所以,如果某个子树为null,则应该返回另一个子树里的最小深度。的最短路径上的节点数。叶子节点是指没有子节点的节点。二叉树的最小深度是指从。
2025-02-14 01:43:13
209
原创 算法很美笔记(Java)——树(知识点)
2、没有左子树,则向上追溯,直到某个祖先节点是右孩子,那么这个祖先节点的父节点就是所求。2、没有右子树,则向上追溯,直到某个祖先节点是左孩子,那么这个祖先节点的父节点就是所求。但是如果这个节点是改变后的,想要更新height,就只能用上面的,不能用下面这个方法(记录过的height)。判断不平衡类型的关键在于当前不平衡节点(平衡因子为 -2 或 2 的节点)及其子节点的平衡因子。具体来说:指针先指树根,加入队列里后,弹出队列,把他的孩子都加入,再弹,再加。指的是中序遍历后的那个序列,某节点的前驱。
2025-02-12 17:34:04
752
原创 算法很美笔记(Java)——dfs/剪枝
dfs:深度优先遍历一般用于:有很多种状态,不同状态下又有很多种状态,形成一棵树,每一整个从树根到叶子的分支代表一种结果,需要校验每种结果是否可行。简而言之,一直进行“尝试、行就继续走,不行就退回”的过程。剪枝:当需要在所有情况中,选某个情况时,有一些情况一定是不可以的,这时候直接用代码来限制不选这种情况,省略了选择后判断的过程,这种限制不选的操作叫剪枝。(在素数环中体现明显)剪枝越早越好。
2025-02-03 23:01:55
1087
原创 算法很美笔记(Java)——递归、回溯
自上而下的递归叫分治法自下而上的递归叫逐步生成结果(也就是把n想成一个比较小的数来找规律,用前面的结果来算后面的结果,因为后面的结果会包含前面的结果递归比迭代(循环)开辟的空间(栈)多如果明确了递归次数,用迭代比较好递归改写成迭代要找好决定量,决定量是一个就一维,决定量是两个就二维写迭代决定量就是画表格,找关系。
2025-01-22 21:40:38
618
原创 算法很美笔记(Java)——数学问题
这道题可以抽象成三进制问题,因为砝码重量是三进制如果砝码重量是二进制,则可以将要称的重量转化为二进制,二进制对应位如果是1表示选用,如果是0表示不用eg:称11,二进制为1 0 1 1,所以选用8,2,1的砝码8 2 1对于三进制,如果沿用上面的方法会造成砝码重复使用,这是不行的eg:称5,三进制为1 2,所以选用一个3,两个1的砝码3 1所以策略是:让2进位,只要是2,就进位,原位补-1,因为0 2和2 -1的都表示一个数。eg:两个3号砝码,和一个九号砝码减一个三号砝码一样。
2025-01-03 14:15:01
429
原创 力扣第二次刷题
运算n>>1时,奇数的结果=他前面的那个偶数的结果(6>>1 = 3,7>>1 = 3)while的方式时间复杂度比for循环(注释内容)低。但实际上奇数也可以当成 他前面的那个偶数+1。for循环的方式时间会超。
2024-11-10 21:46:31
206
原创 力扣第一次刷题
Integer方法主要是将指定进制(radix)表示的字符串(s)转换为十进制整数如果a是"101",那么经过这一步操作,它会被转换为对应的十进制整数5。是Integer类的另一个静态方法,将十进制整数转换为二进制字符串形式字符转整形可以直接在后面- '0' 比如。
2024-11-10 14:08:48
353
原创 算法很美笔记(Java)——位运算
在Java中,是一个位运算符,用于对两个整数的二进制表示进行按位与(AND)操作。按位与操作的特点是,只有当两个相应的二进制位都为1时,结果的该位才为1;否则,结果的该位为0。这样一位一位比较,最终形成一个由0和1组成的二进制数。(所以这个二进制数转换成十进制的时候,如果有多个1, 或者, 1不在最后显示,会导致对应的十进制数不是1而是更大的数,这个注意一下,在后面做判断的时候做一下处理,以防本应符合题意,却漏掉)
2024-11-09 15:53:10
1036
原创 算法-中缀转后缀表达式(C++)
从左至右依次遍历中缀表达式,一个字符一个字符的处理运算符都要入栈处理,而后续输出的运算符也只从栈内取(保证取的运算符都是经过处理的)(这里的栈内处理,实则不用在栈内操作运算符,而是通过于当前运算符做比较来当作处理)什么时候输出:运算优先级较高时输出(因为要保证优先级高的先运算的原则)(但由于输出的运算符只从栈内取,所以这里的输出具体来说是:运算优先级高于当前处理运算符时输出)
2024-10-16 17:26:43
1198
原创 算法很美笔记(Java)——字符串(下)
就是将字符串转换成k进制数把要找的序列的hash值算出来,假如要找的序列长度为n去待查找的的序列,每n个元素算一个hash值将这个hash值与要找的序列的hash值作比较,相等则找到。
2024-10-15 19:38:33
438
原创 算法很美笔记(Java)——字符串
假设字符串是ASCII字符串因为码表一共128个元素,所以辅助空间开129个,索引是0~128可以直接遍历每个字符,取对应的码值作为索引,填入辅助空间内如果不能开辟辅助空间,就只能两层for循环遍历取到一个元素,就与所有元素作比较,看相不相等。
2024-10-04 01:12:00
437
1
原创 算法很美笔记(Java)——多维数组和矩阵
当leftUpRow、leftUpColumn、rightDownRow、rightDownColumn都相等时会剩中间一个中心元素时单独加if处理。不能直接遍历,遇到0就清零,这样会导致被清零的数也当成0,清零他的行列。顺时针一圈一圈的遍历,与左上角和右下角的坐标作比较,直到两坐标交错。设置一个标志l2r,来控制从从左下到右上遍历还是从右上到左下遍历。从左下到右上遍历,就横坐标--,纵坐标++;从右上到左下遍历,就横坐标++,纵坐标--;每次横着或竖着改变坐标时,l2r就要变。
2024-10-02 09:34:59
229
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅