algorithm-series-2d-partial-order
二维偏序
概念
偏序关系满足:
反自反性(Reflexivity): 对于集合中的每个元素,关系都与自身存在。
反对称性(Antisymmetry): 如果存在a<=b && b<=a,则必须是a==b
传递性(Transitivity): 如果存在a<=b && b<=c,则必须是a<=c
二维偏序问题涉及对一个二维数据集中元素的排序,其中排序不仅仅依赖于元素自身的大小关系,还可能依赖于元素在不同维度上的关系。
二维偏序是这样一类问题:已知点对的序列(a1,b1), (a2,b2), (a3,b3)...,
并在其上定义某种偏序关系<,现有点(ai,bi),求满足(aj,bj) < (ai,bi)的的数量。
二维偏序问题一般是要使其中的一个维度有序,再通过树状数组的方式处理另一个维度
翻转对
给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。
你需要返回给定数组中的重要翻转对的数量。
示例 1:
12输入: ...
solution-github-chinese-character-encoding-issue
Github克隆仓库出现中文乱码问题
最近在使用自己的Github仓库时,发现clone下来的仓库中,有个文件里的中文乱码了
文件内容如下:
1234;------------ Encoding: UTF-16 ------------;请对照 CapsLock+settingsDemo.ini 来配置相关设置(乱码显示)[Global]...
第一眼的想法是,Github服务器和本地Windows环境不一致导致的,于是我把UTF-16修改成了UTF-8
12;------------ Encoding: UTF-8 ------------...
提交测试后,发现还是不行
后来顿悟了,我应该在本地把文件的格式改成UTF-8,而不是修改里面代码的Encoding(笑哭)
比如,我这里用notepad++,打开文件后直接在左上角编码-使用UTF-8编码-保存,就好了
此时,再上传到Github,clone下来测试,没问题
note-wallpaper-engine
提取创意功放壁纸的工程文件
下载创意工坊的壁纸后,右键,在资源管理器中打开,可以看到一个叫做scene.pkg的文件,wallpaper-engine就是通过pkg格式保存工程文件
需要通过RePKG工具进行提取:下载链接
提取后,就可以学习大佬们的壁纸制作了
创建壁纸
使用wallpaper-engine自带壁纸编辑器,打开壁纸编辑器-使用模板,填写项目名称,选择2D Scene,即可新建壁纸
复制壁纸:把RePKG提取的工程文件复制到创建壁纸的工程文件目录即可(编辑-在资源管理器中打开)
编辑壁纸
可以给壁纸添加效果,例如:眼动追踪,树叶摇摆(头发,身体部位)
可以给壁纸添加组件(或者叫图层),常见的有雨滴,音乐可视化等,可以浏览创意工坊找到想要的组件
tips-python
前言:Python有很多好用的方法和工具类,但是经常很长时间不用就忘记了,于是记录下
语法
异常处理
123456try: # 正常的操作except Exception as e: # 异常处理else: # 没有异常执行这部分代码
文件写入
r:只读,不创建文件
r+:读写:不创建文件
w:只写,创建文件,存在文件则清空
w+:读写,创建文件,存在文件则清空
a:只写,创建文件,存在文件则附加内容
a+:读写,创建文件,存在文件则附加内容
123with open("file-name", "a") as file: file.write(ncbi_id) file.write("\n")
遍历
12345for item in list: print(item) for idx, item in enumerate(list): print(idx)
字符串
12# 保留小数normalized_score = format(normalized_score, &q ...
algorithm-tree-fenwick-tree
树状数组
概念
树状数组(Fenwick Tree)是一种数组实现的树状结构,常用于解决前缀和问题。它能够在O(log n)的时间内进行单点更新与区间查询操作,特别适用于在动态变化的数组中进行频繁的前缀和查询和更新。
通常需要对输入数据进行离散化,因为数据通常是不连续,而数组要求索引连续
操作
单点修改:更改数组中一个元素的值
区间查询:查询一个区间内所有元素的和
范围:[1, n];
例如:7(111)
单点修改:111 -> 1000
区间查询:111 -> 110 -> 100
前缀和模板
注意不能add(0, val),无法跳出循环,因为lowbit(0) = 0
1234567891011121314151617181920212223242526class FenwickTree { int[] tr; // [1, n] public FenwickTree(int[] nums) { // [0, n-1] this.tr = new int[nums.length+1]; f ...
algorithm-tree-pseudo-tree
基环树 (pseudotree)
在基环树中,除了环上的节点之外,其他节点都只属于一条路径,从根节点到其他节点都是唯一的。
每一个内向基环树(连通块)都由一个基环和其余指向基环的树枝组成
相关题解
2127. 参加会议的最多员工数
note-book-the-design-and-implementation-of-redis
本文不适合学习,偏向复习用
相关文章:Redis笔记——Redis设计与实现
数据结构与对象
看前须知
对象章节的有些内容最好提前了解下,比如以下内容:
在 Redis 的数据库中新创建一个键值对时, 我们至少会创建两个对象, 一个对象用作键值对的键(键对象), 另一个对象用作键值对的值(值对象)
对于 Redis 数据库保存的键值对来说, 键总是一个字符串对象, 而值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象的其中一种
当我们称呼一个数据库键为“字符串键”时, 我们指的是“这个数据库键所对应的值为字符串对象”
当我们称呼一个键为“列表键”时, 我们指的是“这个数据库键所对应的值为列表对象”
简单动态字符串(Simple Dynamic String,SDS)
在Redis中,有两种字符串,一种是传统的C字符串,通常仅用于无需修改的地方(例如日志中)。
而如果Redis需要一个可以修改的字符串,就会使用SDS(键值对的字符串都是使用SDS)
SDS定义
123456789struct sdshdr { // 记录 buf 数组中已使用字节的数量 ...
algorithm-tree-trie
字典树
概念
字典树,也称为前缀树(Trie树),是一种用于存储和管理一组字符串数据的树状数据结构。字典树的主要特点是能够有效地支持字符串的插入和查找操作,以及高效地完成具有相同前缀的字符串的检索。
字典树是一种多叉树结构,每个节点代表一个字符,根节点通常为空。从根节点到某个节点的路径上的字符连接起来即构成一个字符串。
模板
添加和搜索操作的模板
12345678910111213141516171819202122232425262728class Trie { class TrieNode { boolean end; // int cnt; // 维护节点数量 TrieNode[] children = new TrieNode[26]; } TrieNode root = new TrieNode(); void insert(String word) { TrieNode cur = root; for (char c : word.toCh ...
tips-git
基本
graph LR
subgraph 1
direction LR
a(workspace) --add--> b(index) --commit--> c(repository) --push--> d(remote)
d --pull--> a
d --clone--> c
c --checkout--> a
end
subgraph 2
a(workspace) --stash --> e(stash)
e -- stash pop --> a
end
一些case
取消跟踪文件
众所周知,在.gitignore中添加文件名称,可以避免添加“脏东西”到git仓库中
但如果已经添加了“脏东西”,那么在gitignore中再添加名称也没用了
需要手动取消跟踪:git rm --cached file-name
重新跟踪文件
这个case比较特殊,有次在一个本地Github仓库的子目录中clone其它仓库,然后一顿敲代码后,直接add ...
note-java-vm
Java内存区域与内存溢出异常
运行时数据区域
程序计数器
当前线程所执行的字节码的行号指示器,控制程序的分支、循环、跳转、异常处理和线程恢复等功能
每条线程都需要有个独立的程序计数器,线程之间计数器互不影响(线程私有)
执行Java方法时,计数器记录的时正在执行的虚拟机字节码指令地址;执行本地方法时,计数器值为空
Java虚拟机栈
线程私有
执行方法时,vm都会同步创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息
方法被调用的过程对应一个栈帧从入栈到出栈的过程
如果线程请求的栈深度超出vm所允许的深度,则会抛出StackOverflowError异常。如果vm可以动态分配栈容量(深度),当栈扩展到无法申请到足够的内存时,则会抛出OutOfMemoryError异常。(HotSpot vm时不可以动态扩展的,以前的Classic vm倒是可以)
局部变量表
存放编译期可知的各种vm基本数据类型、对象引用和returnAddress类型
这些数据类型的存储空间以局部变量槽来表示,64位的long和double占用两个变量槽。局部变量表需要分配的空间在编译期间 ...