题目链接leetcode 3563 移除相邻字符后字典序最小的字符串
解题思路暴力解法-深度遍历(超时)遍历出字符串每种变化的可能并选出字典序最小的字符串,时间复杂度为$O(n * 2^n)$
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051func compare(a *string, b *string) int { var i, j = 0, 0 for i < len(*a) && j < len(*b) { if (*a)[i] != (*b)[j] { return int((*a)[i]) - int((*b)[i]) } i++ j++ } if j >= len(*b) && i >= len(*a) { return 0 } else if j >= len(*b) { re ...
力扣随机五道题三道都是二分
题目链接leetcode 3347 执行操作后元素的最高频率 II
解题思路超时方案:暴力枚举+二分查找枚举所有可能的n,再通过二分查找n的数量、n-k至n+k的范围,结合操作上限得出,在3346 执行操作后元素的最高频率 I中能通过,但在此题中能超时
123456789101112131415161718192021222324252627282930313233343536373839404142434445func findLightIndex(nums []int, n int) int { var l, r = 0, len(nums) - 1 if nums[0] >= n { return -1 } for l < r { m := (l + r + 1) / 2 if nums[m] >= n { r = m - 1 } else { l = m } } return l}func findRightInde ...
题目链接leetcode 3605 数组的最小稳定性因子
解题思路这道题说难不难,只是追求通过所有实例的话只要根据题目中最小化最大值想到二分答案就能做到$O(n \log n \log V)(V=max(nums))$的时间复杂度
单次计算这里声明一个子函数func sub(nums []int, maxC int, length int) bool用于计算maxC次操作内能否使最长稳定子数组的长度小于等于length
123456789101112131415161718192021222324252627282930313233343536373839func gcd(a int, b int) int { if b == 0 { return a } return gcd(b, a%b)}func sub(nums []int, maxC int, length int) bool { var leng = len(nums) var arr = slices.Clone(nums) var g = 1 //l和 ...
题目连接leetcode 3171
参考链接灵茶山艾府 - leetcode 3171题解
解题思路主要目的就是算出所有子数组的按位运算值并算出与k的绝对差,暴力解法时间复杂度为$O(n^2)$且题目中nums.length最大值为$10^5$肯定会超时
为了更好理解,设一对指针l/r和一个数组dp[],dp[l]表示nums[r]|nums[r-1]|nums[r-2]...nums[l]的值,即子数组r至l的按位与运算值(当r后移时dp[0]至dp[r]中的值会被覆盖)
LogTrick的思路就是利用当a|b=b时a|b|c|d|e == b|c|d|e的特点省去大量的重复计算(最终时间复杂度能达到$O(n \log U)(U=max(nums))$),即当(nums[r]|dp[l]) == dp[l]就可以直接跳过dp[l-1]到dp[0]的计算,因为此时dp[l],dp[l-1],dp[l-2]…dp[0]与上一个r边界的值完全相同
123456789var dp = make([]int, len(nums))var ret = abs(nums[0]- ...
题目链接leetcode - 907
前置概念单调栈栈中元素始终保持某种单调性,即从栈底到栈顶使用递增/递减,比如:
将[1, 4, 3, 9, 5]压入单调递增栈
压入1,stack:[1]
压入4, stack:[4, 1]
若直接压入3则无法保持单调性,此时需要不断弹出栈顶直到能够保持单调性,这里应该弹出4,压入3,stack:[3, 1]
压入9,stack:[9, 3, 1]
同样,若直接压入5则无法保持单调性,需要弹出9再压入,stack:[5, 3, 1]
通过压入单调栈的过程就可以得知数组中的元素A前/后第一个大于/小于A的元素,例如上述示例中,在弹出4时就可以知道元素4往后第一个小于4元素时3,在弹出9时就可以知道第一个小于9的是5
题目解析需要计算每个子数组最小值的和,那么就可以从获取每个元素作为最小值所在的子数组,再将所有子数组的数量乘对应最小值相加即可得到答案
辐射范围定义这里临时定义一个辐射范围,即元素X辐射范围内所有含X的子数组最小值都是X
确定辐射范围显然要满足辐射范围的唯一条件就是该范围内没有比X更小的元素,这时候就可以 ...
注意:本文章基于@tanstack/react-query@5.90.2
介绍tanstack query (原react query)是一个异步状态库,核心功能是从服务器获取、缓存、同步与更新状态从而摆脱手动发送网络请求。
tanstack query通过QueryClient管理缓存,并在合适的时候重新获取/刷新/回收缓存,缓存在QueryClient中以键值对的方式存在(键的类型为(string|number|undefined)[])
快速入门安装12npm i @tanstack/react-querynpm i @tanstack/react-query-devtools --save-dev
启用tanstack query创建一个QueryClient对象并使用QueryClientProvider导入
1234567891011121314151617181920212223const queryClient = new QueryClient( { defaultOptions: { ...
注意:本文章基于zustand v5.0.7
介绍Zustand是一个轻量便捷的全局状态管理库,可在短时间内快速上手
对比
维度
Redux
MobX
Zustand
样板代码
多(action、reducer、selector)
少(装饰器 / makeAutoObservable)
极少(create(set => …) 即可)
异步
需中间件(thunk/saga)
原生 runInAction / flow
原生 async/await
绑定组件
react-redux connect/useSelector
observer 高阶组件
直接 useStore 钩子
快速上手安装123npm i zustand# npm i immer persist# 可能需要用到的中间件依赖
创建状态1234567891011121314151617181920interface UserStore { id: number age: number arr: number[ ...
Android
未读前置知识repo一个易于git的python脚本,可以同时管理多个git项目,批量执行git操作
开始构建同步源代码先创建一个空文件夹并进入再用repo初始化仓库
1repo init -u https://android.googlesource.com/kernel/manifest
初始化后在通用内核镜像发布构建中找到需要构建的内核版本,在所需版本的内核工件中下载manifest_xxxxx.xml并移动到.repo/manifests/manifests.xml
注意:对于已废弃的构建版本需要将uptream和dest-branch改为正确的分支例如:
123456789101112131415<?xml version='1.0' encoding='UTF-8'?><manifest> <remote name="aosp" fetch="https://android.googlesource.com/" review="https ...
概念WebSocket一种基于单TCP连接的全双工通讯协议,在Web中可以提供与服务器双向通讯的能力
SockJS一种类WebSocket的方案,它提供多种传输方式实现回退机制,确保在各种环境中都能实现双向通信SockJS会提供以下传输方式:
WebSocket(首选)
Server-Sent Event(SSE)
HTTP流
HTTP轮询
JSONP轮询
STOMPSTOMP(Simple Text Oriented Protocol)是一种轻量级、基于文本的协议,支持订阅(topic)或点对点(queue)通讯,STOMP通讯中通常含有以下角色:
客户端(Client):发送/接收消息,订阅topic/queue
应用服务器(Application Server):对消息进行业务处理以及路由
消息代理(Broker):接收客户端连接,管理目的地(queue/topic),对消息进行持久化
在整个STOMP中应用服务器更多充当起一个”中间件”和”代理服务器”的身份,对消息的持久化和向订阅topic/queue的设备发送数据的工作通常由B ...
继承关系图
进程池的几种常用创建类型通过ThreadPoolExecutor构造函数创建12345public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory)public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, Blocking ...




![[leetcode 3563][Go][动态规划]区间DP和线性DP的混合使用](https://s3.inkorcloud.top/image/2025/10/155967c8f2c77f87804270970c10af46.png)
![[leetcode 3347][Go][答案二分]万能的二分法](https://s3.inkorcloud.top/image/2025/10/b92574e48ab8dfff1b32cc049a61df5f.png)
![[leetcode 3605][Go][二分答案]能二分的不只有数组](https://s3.inkorcloud.top/image/2025/10/3314adab4c88e645ac3a6dae75ab73e0.png)
![[leetcode 3171][备忘录][Go]关于LogTrick解法的个人理解](https://s3.inkorcloud.top/image/2025/10/3396d17ba0c1696cb78fb6e93d7d1d0b.png)
![[leetcode 907][Java]子数组的最小值之和](https://s3.inkorcloud.top/image/2025/10/4ffa32dd8b74fdf9f115a65959cb64e1.png)