- 博客(26)
- 收藏
- 关注
原创 leetcode hot100 多维动态规划
计算是否回文, 或许可以用双指针, 一个指向头, 一个指向假定len的尾, 那么这个len要从多大开始呢–第二条可以得出: dp[i][j] = s[i]==s[j] && dp[i+1][j-1]由一维转为二维了, 其实规划式子还是和前面的状态有关. 比如dp[i][j]表示到达(i,j)的所有路径, 又(i,j)只会从(i-1,j)&(i,j-1)移动而来, 那么,那么其余位置可以计算了, dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j]
2025-04-01 00:15:39
951
原创 leetcode hot100回溯
需要一个回溯函数找出方案,;还是采用索引存储的方法, 每次更新索引, 比较word.charAt(idx)与当前字符是否相同, 比较四个方向上的字符, 有一个为true则真 ,并且访问下一个字符前先将当前字符修改位不可见防止访问循环, 回溯时恢复即可。全排列的题很适合用回溯来做, 就是在n个数中按不同顺序选择数据填入, 定义递归函数bT(first,oput), oput为当前排列顺序, first标识排列到第第first位置, 如果first=n,即为当前排列结束。新建添加的数组长度可以是0,1,…
2025-03-17 12:42:01
1226
原创 leetcode hot100特殊题型
136. 只出现一次的数字题解:涉及数字的要求线性时间的, 一般尝试能不能用位运算实现只出现一次的数字, 多个数字异或, 两个相同的数字异或为0, 那么最终剩下的就是只出现一次的数字169. 多数元素题解:第一种, 使用哈希表存储每个元素出现的个数, 超过n/2的即为多数元素, 多数元素只可能有一个, 所以找到即可return第二种, 由于多数元素总是>n/2的, 因此排序后索引值n/2处必定是多数元素.75. 颜色分类题解:只有三个元素, 那么遇到红色插入0后, 遇到蓝色插入2前即可31
2025-03-16 22:52:35
1074
原创 leetcode hot100普通动态规划/基础DP
从s头遍历到尾部, 遍历到i时, 如果0~i存在一个j使得s[0,j]在字典中且s[j,i]在字典中, 那么说明s[0,i]在字典中,即dp[i]=true,那么此处就存在一个DP,每次步入一个新的i,判断其中是否存在j使得上述成立, 直至i=s.length()如果出现负数, 那么前一位的最大值会变成最小值, 前一位的最小值会变成最大值, 那么当前的最大值=Math.max(前面的最大值*当前值,当前值),当前的最小值=Math.min(前面的最小值*当前值, 当前值)
2025-03-15 23:43:25
1063
原创 leetcode hot100贪心
我最初的想法是, 从索引0出发,尽可能多的走远, 如果走远不能到达/即碰到跳跃0步就break;如果要获取当前的下一步能够跳跃的最远的范围, 就要在当前范围内, 计算当前范围内索引值的跳跃值/也就是下一步的下一步跳得有多远,直至每次遍历的值的最远距离均小于当前最长字段/i==maxLength, 那么将当前的最长字段存入res, 更新计算mL。所以当到达当前最大跳跃值后(i=end), 那么当前的最远距离就是刚才计算的上一跳的范围内索引值的最远跳跃值。维护股价最小值, 维护利润最大值即可。
2025-03-13 23:08:01
1288
原创 leetcode hot100 图论
遇到一个visited为0的节点, 深度遍历该节点的指向图, 并且将路过的节点访问值都为1代表正在访问 ,直至访问结束, 如果未结束且访问到visited值为1的节点, 代表该路径当前已存在环路(之前已访问过该节点),将成员变量valid置为false。二维数组, 遍历遇到当前值为1的, 岛屿数加一, 然后进行岛屿治理–dfs深度遍历当前值所在的岛屿, 将该岛屿所在的其他值全部置为’2’, 那么继续遍历时就不会重复计算。将所有课目的访问值置为0代表未访问(1代表正在访问,2代表访问完成)
2025-03-09 21:37:10
1200
原创 PythonCrowler
python中原生的一款基于网络请求的模块,作用是模拟浏览器发送请求。解析的监察部文本内容都会在标签之间或者标签对应的属性中进行存储。指定url-发送请求-获取响应数据-持久化存储。解析分类:正则, bs4, xpath。
2025-03-05 22:13:49
182
原创 leetcode hot100 滑动窗口&子串
采用哈希表来存储该位置的前缀和, key为前缀和, 由于数组的值可以是正数也可是负数, 会存在多个位置的前缀和为同一值, 那么value可以记录为该前缀和一共记录的次数。通过暴力解法观察, 其实可以在k次比较最大值的地方优化, 如果新加入队列的值比队尾的值大, 那么此时该窗口的最大值就一定不是队尾的值了(至少都是新加入队列的值),如何保证靠近队头的元素即窗口中最大值–窗口中最大值>不在窗口中的队尾元素时会移除队尾元素, 窗口中最大值<不在窗口中的队尾元素时会直接添加至队尾;
2025-02-18 18:56:53
823
原创 leetcode hot100 链表
创建一个大小为k的最小堆, 遍历链表组把每个链表的头节点放入其中, 堆顶即为最小节点, 新建一个链表来存储堆顶的元素, 每弹出一个节点, 就新增一个该节点的下一节点直至链表空堆空。设置第一个公共节点为node, 链表A节点数量为a, 链表B节点数量为b, 两链表公共尾部节点数量为c, 那么两链表到node的距离分别为a-c, b-c。由于需要获得最终的头节点, 所以递归时需要记录一个节点, 每次递归将新头节点计算为当前节点的下一节点, 直至倒数第二个节点, 返回值同样是该新头节点。
2025-02-17 15:09:24
819
原创 JVM-Java程序的运行环境
JVM垃圾回收器(老年代垃圾, 新生代垃圾)运行数据区中的方法区Method Area。对象什么时候可以被垃圾回收。Java内存泄露排查思路。CPU飙高排查方案与思路。CPU飙高排查方案与思路。
2025-02-15 22:43:59
895
原创 Multi-Thread多线程
(线程池):为了避免下一级方法影响上一级方法(性能考虑),可使用异步线程调用下一个方法(不需要下一级方法返回值),可以提升方法响应时间。:调用多个接口来汇总数据,如果所有接口(或部分接口)的没有依赖关系,就可以使用线程池+future来提升性能。:使用了线程池+CountDownLatch批量把数据库中的数据导入到了ES(任意)中,避免OOM。聊一下ConcurrentHashMap。如何控制某个方法允许并发访问线程的数量。请谈谈你对 volatile 的理解。死锁产生的条件是什么。
2025-02-14 21:19:52
1206
原创 leetcode hot100 堆
不如把数据在堆的排序方式下分为左组和右组, 如[1,2,3,4,5,6]分为[1,2,3]和[4,5,6], 这样通过堆就能获取到3和4, 计算获得即可;遍历完成后, 本堆中留下来的就是最大的k个元素, 且堆顶就是第k大的元素, java中存在PriorityQueue就是一个最小堆(底层结构是二叉堆)本题可以用最小堆解, 限定一个大小为k的最小堆, 遍历数组将元素加入最小堆, 每当堆大小将超过k, 则将堆顶元素弹出(此时堆顶元素即此时最小值)按照堆的性质, 可以将堆分为最大堆和最小堆,
2025-02-12 21:28:12
957
原创 Collection_Map
ArrayList与LinkedList。HapshMap的put方法的具体流程。HashMap长度一定是2的次幂。ArrayList底层实现原理。数组与List之间的转换。HashMap实现原理。
2025-02-11 20:12:52
824
原创 leetcode hot100 栈
连续的升温时res[idx] = 1, 降温时连续的数字入栈, 直到某一温度>栈顶索引的温度, 栈顶出栈, 栈顶索引res 相应计算, while循环保持判断该温度与栈顶温度直至结束。与栈相关, 所以一直在想存入取出的问题, 如果要存取, 那么本体一定是与数字大小相关, 故而判断入栈条件可以是temps[cur]>temp[pre]如果为 ’ ] ’ , 将括号中的字符串重复数字栈顶遍, 之后作为获取括号前的字符串即字符栈顶的字符串, 拼接成为新的字符串。单调增栈–栈存储索引, 保证栈内递增。
2025-02-10 19:07:06
1031
原创 消息中间件RabbitMQ&Kafka
ISR(In-Sync Replicas)指与leader保持同步的follower副本。当leader故障时,优先从ISR中选举新leader,因为它们数据一致性更高。在消费者内开启线程池加快消息处理速度。扩大队列容积, 提高堆积上限。增加更多消费者提高消费速度。在生产环境下, 使用。
2025-02-09 23:15:44
823
原创 MySQL
事务时一组操作的集合, 是不可分割的工作单位, 事务会把所有的操作作为一个整体一起向系统提交或撤销操作, 这些操作要么同时成功要么全部失败。通过创建覆盖索引能够比较好地提高性能, 可以通过覆盖索引加子查询的形式进行优化。指维护一个数据的多个版本,使得读写操作没有冲突。根据readView的匹配规则和当前的一些事务id判断该访问那个版本的数据。不同的隔离级别快照读是不一样的,最终的访问的结果不一样。readView解决的是一个事务查询选择版本的问题。指查询中使用了索引且索引中包含了需要返回的列。
2025-02-07 21:22:45
682
原创 leetcode hot100矩阵
但是我感觉这样应该会很麻烦而且代码复用率低, 最后我看别人的题解用的是循环四个角的元素进行交换。使用原地算法就不好再开一个mn矩阵, 但是又不能在遍历的过程中直接将元素设置为0, 会影响接下去的判断。双重循环标注完0后, 再次遍历结合布尔数组判断将0所在的行列中元素标记为0即可。其实跟上面那题差不多, 也还是逐层旋转, 因为每一层的旋转不会影响其他层。仅根据每行首元素的判断是不足够的, 然后尝试对角元素.本题最重要通过矩阵排序的性质选取要判断元素的位置。
2025-02-07 18:20:49
818
原创 leetcode hot100 二分查找
既然mid天然的将数组分为两组, 且必有一组是递增的, 数组中的值互不相同, 可以将nums[mid]与nums[0]相比, 如果较之大, 则说明0-mid是连续的, 较之小则说明mid~n-1是连续的。也是分部分的想法, 如果nums[mid]>=nums[0] 那说明最小值存在于后一部分, 如果nums[mid]<nums[0] 说明最小值在前一部分。当目前值等于目标值时,为了查找第一个和最后一个目标值, 需要确定是收缩左边界还是右边界, 可以通过一个布尔型参数。看了别人的解题才知道怎么做。
2025-02-06 22:53:50
838
原创 Redis
应用场景: 秒杀系统中临界单同时被两个线程尝试获取, 如果只有单台服务器, 则使用互斥锁即可;但在实际应用中, 缓存使用的是集群式部署在多个Tomcat上, 而互斥锁无法在多台机器上使用, 此时就需要用到分布式锁. 缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。延迟操作保证了数据库修改后与其相关的数据库的同步修改, 避免缓存抢先同步脏数据。读操作: 缓存命中则直接返回;双删操作极大保证了在修改数据库间隙由于其他线程的读操作中缓存写导致的脏数据。
2025-02-05 21:59:15
618
原创 leetckde hot100 普通数组
最初的想法就是新增一个数组作为flag数组, 循环遍历给出的整数数组, 出现的标志为1, 未出现的默认为0, 再次遍历时查找第一个为0的正数即为所求。如果再次遍历flag数组, 查找到第一个为0 的flag即可返回, 若遍历完数组flag均为1, 则说明该数组是从1-n的连续数组, 返回n+1即可。但如果不排序直接进行比较, 可能会因为逻辑上的判断而出错, 比如[[8,10],[1,3]], 判断10>1,所以该区间合并为[1,10]创造一个新的数组, 给定一个偏移量为k%n的映射。
2025-02-05 13:41:34
609
原创 leetcode hot100 双指针
继续遍历, 比较左右两侧柱子高度, 矮的那一侧若小于记录的最高柱, 则自然而然会形成夹在两侧的水坑, 水坑高度即Max-height[i], 每遍历到一个新的位置, 计算该位置水坑的深度即可。若sum>0 ,说明距离=0的条件正数过大或负数过小, 则right–;优化前我还比较了以下即便是移动左右挡板情况下, ans是否最佳的情况, 但后来发现最终还是会比较修改前与修改后的ans ,所以该情况比较没有必要(即注释掉的代码)首先, 三个数的和为0, 说明三个数要么全都是0, 要么至少存在一个负数和一个正数。
2025-02-04 21:33:02
617
原创 leetcodehot100 哈希
要获得最长数字连续字符, 就得从第一个连续数字开始计数, 那么循环遍历数组, 首先判断该值-1 即该值是否有可能为连续数字的开始数字。每遍历到一个字符串, 查找哈希表是否有相同的键, 若存在, 则将该字符串添加到值中, 于是哈希表的值是一个字符串List。既然无法通过排序来掌握数字顺序, 那就通过哈希表, 将数组值作为键, 直接查询该值是否存在以判断是否连续。更新哈希表, 如果未查找到,当前值还未被加入哈希表, 更新哈希表, 将当前值与其索引加入哈希表.如果(该值-1)存在, 则该值不是初始数字, 略过。
2025-02-03 23:26:40
527
空空如也
c语言代码编写错误,反复测试仍未解决
2023-02-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人