avatar
文章
51
标签
70
分类
8
home
archives
tags
categories
about
Elian's blog page
home
archives
tags
categories
about

Elian's blog page

250928-251005 weekly electron
发表于2025-10-05|tool
尝试使用electron将React生成的静态网页打包成桌面应用。 0. 项目结构静态网页资源dist应先移动到application项目中。 1234567891011121314.├── application│ ├── package.json│ └── main.js├── dist| └── index.html└── web ├── package.json ├── vite.config.js ├── src ├── App.jsx └── components └── Navigation.jsx 1. 项目初始化与安装参考:教程 但是在安装时出现问题,是网络的原因。运行以下命令后安装,解决: 1npm config set registry https://registry.npmmirror.com; $env:ELECTRON_MIRROR =...
251003 thinking factory method& abstract factory
发表于2025-10-03|Design Pattern
1. 工厂方法以点菜为例。 1234567type dish interface{ Cook() }type pizza struct{}type burger struct{}func (*pizza) Cook() { }func (*burger) Cook() { } 若不用工厂方法,则客户端直连产品,新增产品要改分支,不符合开闭原则。 1234567891011121314func orderDish(typeName string) dish { switch typeName { case "pizza": d := &pizza{} d.Cook() // "cook pizza" return d case "burger": d :=...
250926 thinking 翻转链表
发表于2025-09-26|data structure & algorithm
1. 操作以这道题为实例。 对链表的某一部分进行翻转时,需要记录以下这几个节点: p0: 发生翻转区域的前置节点,这个是为了区域翻转后的连接(循环结束,p0.next为翻转后区间的最后一个元素)。为了统一处理(因为原链表有的翻转区域没有前置节点),先构造dummy=ListNode{next: head}。这样的话,翻转后的链表的头节点即为dummy.next。p0可能为dummy。 cur: 当前遍历到的节点,循环结束,cur为区域后的第一个元素 pre: 当前遍历到的节点的原链表中的上一个节点,在翻转后就是next。在最初翻转前为nullptr,循环结束,pre为翻转后的区域的第一个元素 nxt: 当前遍历到的节点的原链表中的下一个节点,下一个cur,在翻转后它的next就是pre。 操作如下: 123456789101112cur := p0.nextpre := nullptrfor cur in area; do nxt := cur.next cur.next = pre pre = cur cur = nxtend...
250926 thinking 0-1背包dp
发表于2025-09-26|data structure & algorithm
本文的内容是0-1背包的空间优化、倒序遍历,以及至多/恰好/至少变体。一些基本概念不再赘述。 1. 空间优化由于它的递推表达式: $$dp[i][c] = \max{, dp[i-1][c],; dp[i-1][c-w[i]] + v[i] ,}$$ dp[i][c]: 遍历到第 i 个物品时,若总容量为 c 时能获得的最大价值 可以发现每次更新值时,都是 i-1 更新 i 的,所以完全可以写为: $$dp[c] = \max{, dp[c],; dp[c-w[i]] + v[i] ,}$$ 2. 倒序遍历在使用一维数组进行空间优化时,容量 c 必须“倒序遍历”(从最大容量 C 递减到 w[i])。 Why? 若正序遍历(c 从小到大),在同一轮 i 的更新中,dp[c-w[i]] 已经被本轮 i 更新过,会导致同一物品 i 被复用多次,等价成“完全背包”的效果; 倒序遍历能保证本轮计算依赖的是“上一轮 i-1 的结果”,从而保持 0-1 约束。 更形式化的解释:维护不变式“在处理物品 i 时,所有用于计算的 dp[*] 均来自...
250926 thinking 差分
发表于2025-09-26|data structure & algorithm
1. 简介对于一个数组a,构造的这样的一个数组d称为a的差分数组: d[i] = \begin{cases} 0, & \text{if } i = 0 \\ a[i] - a[i-1], & \text{otherwise} \end{cases} 2. 性质 对d构造前缀和数组得到a 对于a的一个下标区间[i,j)对应的元素统一加上一个数c后,则对应的d的变化为:d[i](now)=>d[i](prev)+c d[j](now)=>d[j](prev)-c。 也就是说,差分数组的构造可以将一个区间的变化映射为两个元素的变化。 在实际操作时,还要注意j==a.length,此时超出d索引范围(因为在前面的构造中d.length==a.length)。因此为了方便,通常让d.length=a.length+1,即设置一个dummy。 3. 例题3355.零数组变换I go参考解法:(by 灵神) 1234567891011121314151617func isZeroArray(nums []int,...
250926 thinking 子序列判断
发表于2025-09-26|data structure & algorithm
1. 介绍引例:有一个字符串t。现有若干字符集合$s_i$,需要判断对于每一个$s_i$,它的每一个元素是否在t中出现。 一种方式是,对于t中的所有字符建立一个map。然后对于一个$s_i$中的每一个元素c,若map[c]都判断为存在,则$s_i$的每一个元素都在t中出现,否则不是。 现在将问题换为“有一个字符串t。现有一个字符串集合$s$,需要判断对于每一个元素$e_i$,它是否是t的子序列。” 这个时候,不仅仅要考虑字符的存在与否了,还要考虑字符之间的相对位置关系。 比方说,t=aaabbb,e=ba。判断e是否是t的子序列时,我们还要判断在t的b后面的元素中是否还有a。 我们使用的map得能够“屏蔽”在t的某个元素前面的所有元素的存在性。 于是使用nxt,nxt[i][c]: t中下标不小于i的元素中出现c的最小下标。 2. 解释将nxt[t.length][c]初始化一个很大的值BIG,作为判断存在依据。 其他nxt[i][c]构建: 1234for i in t.length-1 to 0; do copy nxt[i+1] to nxt[i] ...
250926 thinking 反悔堆
发表于2025-09-26|data structure & algorithm
反悔是贪心的一种策略,用于在当前可能不是全局最优解时,“反思”已做过的选择。 而对于这样的策略,常使用堆来辅助实现。具体来说就是将已做的选择按照某种规则放入最大堆中。“反悔”就是“撤销”堆顶的选择,即代价最大的选择。 用最大堆在约束触发时“撤销/替换”当前集合里最差的那个已选项。 1. 示例LCP30. 魔塔游戏 123456789101112131415161718magicTower(nums[0..n-1], hp){ declare a empty max heap, named heap. ans := 0 for num in nums; do if num < 0; then heap.push(num) // push the negative number into the heap, so that we can recover the choice later if needed fi hp += num if hp <= 0;...
250926 tool docker install&command
发表于2025-09-26|tool
1. 国内ubuntu服务器安装docker(使用aliyun镜像源,root用户)1.1. 安装123456apt updateapt install -y apt-transport-https ca-certificates curl gnupg lsb-releasecurl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - # 可能需要先安装curladd-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # 可能需要先apt install software-properties-commonapt updateapt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin...
250824 thinking quicksort
发表于2025-08-25|data structure & algorithm
快速排序是一种平均时间复杂度$O(n\log n)$平均空间复杂度$O(\log n)$的优秀的排序算法。其基本原理是每次维护两个区间里的元素然后不断递归。基本思想与流程是简单明晰的,常见的是左右指针向中间靠拢的方式。但这种方式有很多细节需要注意,例如是左指针先动还是右指针先动、指针移动条件等。稍有不慎,就可能甚至导致死循环。 于是参考《算法导论》给出的更易于理解的做法。 1. 伪代码示例这里是从小到大的顺序排序。 123456789101112131415161718192021222324252627282930// input: A[lo...hi-1], lo, hi// A[lo...hi-1]: array to be sorted// lo, hi: the region to be sorted is [lo, hi)// output: sorted arrQuickSort(A[lo...hi-1], lo, hi): if lo + 1 >= hi; then return // in this case, no element/...
250824 thinking Trie
发表于2025-08-24|data structure & algorithm
字典树(Trie)是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。每个节点有26个子节点,子节点的序号分别代表26个字母。因此,从根节点到某个节点的路径表示一个字符串。有时候,每个节点会有一个标记,用于表示是否为一个字符串的结束。如果一个节点的标记为true,那么从根节点到该节点的路径表示的字符串就是一个单词。 C++示例以下是一个简单的C++实现,支持插入、搜索和前缀搜索。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748class Node {public: int end; vector<unique_ptr<Node>> son; Node():end(0),son(26){};};class Trie {public: unique_ptr<Node> root; Trie() { ...
1…3456
avatar
Eliano
文章
51
标签
70
分类
8
Follow Me
最新文章
260326 thinking kmp2026-03-26
251122 tool Nginx2025-11-29
251122 thinking visitor2025-11-29
251122 tool swagger2025-11-22
251122 thinking template2025-11-22
分类
  • 2024-xv6-labs2
  • Base Knowledge2
  • Design Pattern21
  • Qt1
  • cache1
  • data structure & algorithm15
  • record3
  • tool6
标签
Nginx tool Flyweight Pattern reading note shell Factory Method Abstract Factory Strategy Pattern heap Design Pattern Prototype Pattern Observer Pattern Monotonic Stack Command Pattern Template Method Pattern go Facade Pattern data structure & algorithm binary search mathematics state compression Interface Oriented Programming Iterator Pattern 0-1 bag dp Visitor Pattern Proxy Pattern Record sieve of Eratosthenes linux difference rollback Adapter Pattern Projects string Builder Pattern kmp Trie javascript docker slider window
归档
  • 三月 2026 1
  • 十一月 2025 15
  • 十月 2025 16
  • 九月 2025 6
  • 八月 2025 9
  • 七月 2025 4
网站信息
文章数目 :
51
本站总字数 :
61.8k
最后更新时间 :
©2025 - 2026 By Eliano
框架 Hexo 7.3.0|主题 Butterfly 5.3.5
All Rights Reserved.