- 博客(331)
- 收藏
- 关注
原创 LeetCode系列8—字符串转换整数
题意字符串转换整数 (atoi)题解class Automaton { string state = "start"; unordered_map<string, vector<string>> table = { {"start", {"start", "signed", "in_number", "end"}}, {"signed", {"end", "end", "in_number", "end"}}, {
2022-04-23 12:25:12
517
原创 CMU15-445:Database Systems Fall 2021
Just to keep track of the course for myself
2022-03-23 01:48:12
1925
1
原创 leveldb源码解析系列—SSTable
文章目录概述SSTable文件格式概述SSTable是一种文件的组织格式,存储了有序的key-value,并且持久化在磁盘等稳定存储中。当内存中的Memtable达到阈值后,会转为Immutable Memtable,LevelDB的后台线程执行Minor Compaction会将Immutable Memtable转储到磁盘上的SSTable中。SSTable文件格式SSTable的文件格式可以参考doc/table_format.md...
2022-03-17 21:44:40
583
原创 leveldb源码解析系列—Memtable
文章目录Memtable介绍Memtable数据结构Memtable比较器Memtable实现SkipListMemtable介绍Memtable是内存中管理key-value的数据结构,一条数据插入到WAL后,会插入到Memtable中,当Memtable达到一定大小时,会变成Immutable Memtable,从而转储到磁盘上的SSTable,进行持久化。涉及代码:db/memtable.h、db/memtable.cc、db/skiplist.h、db/skiplist.cc、db/dbfor
2022-03-17 11:25:59
805
原创 LeetCode系列1114—按序打印
题意题解方法三:条件变量class Foo {public: Foo() {} void first(function<void()> printFirst) { // printFirst() outputs "first". Do not change or remove this line. printFirst(); index = 1; cv.notify_all(); } vo
2022-03-09 00:03:28
109
原创 LeetCode系列297—二叉树的序列化与反序列化
题意297. 二叉树的序列化与反序列化题解BFS/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */static std::vector<std::stri
2022-02-23 00:19:24
123
原创 leveldb源码解析系列—Log
Log文件组织方式前文《leveldb源码解析系列—整体架构》中提到了Log文件,本篇对Log文件的组织方式进行解析leveldb/doc/log_format.md中介绍了Log文件的组织方式The log file contents are a sequence of 32KB blocks. The only exception is that the tail of the file may contain a partial block.Each block consists of
2022-02-08 16:32:28
758
原创 leveldb源码解析系列1—基本数据结构
本篇介绍leveldb中基本的数据结构Sliceclass Slice { public: ... private: const char* data_; size_t size_;}封装了C语言风格的字符串,将data和size包装成Slice使用,直接操作指针避免不必要的数据拷贝,但是同样也增加了风险,需要使用者严格控制Slice内容的申请和释放Option...
2022-02-08 15:35:10
597
原创 leveldb源码解析系列0—准备工作
前言:闭门造车是不可取的,一股脑的写代码并不能带来质的提高,只有向更优秀的代码学习才能提高自己,最近一直想读一个质量高且符合我未来想从事方向的源码,但是我深知读源码的困难,害怕不能坚持下去最后也没有收获,所以迟迟没有开始。未来,我可能会从事分布式系统、数据库、存储相关领域,因此leveldb成为一个极佳的选择,再加上阅读leveldb的人数不少,可参考的资料必然不少,这也会降低我读源码的难度。废话不多说,以此博客系列来记录一下我学习的过程吧!收集到的参考资料:...
2022-01-10 18:18:04
421
原创 KVM+OVS+Ryu实践
OVS安装apt-get install openvswitch-switchhttps://docs.openvswitch.org/en/latest/intro/install/general/
2022-01-05 10:53:59
325
原创 读书笔记:《Designing Data-Intensive Applications》
文章目录第一部分第1章 可靠、可扩展与可维护的应用系统第2章 数据模型与查询语言关系模型与文档模型第一部分第1章 可靠、可扩展与可维护的应用系统第2章 数据模型与查询语言关系模型与文档模型文档数据模型:模式灵活、局部性关系模型:联结、多对一和多对多语义...
2022-01-01 16:39:13
1649
原创 LeetCode系列148—排序链表
题意148.排序链表题解方法一:自顶向下归并排序class Solution {public: ListNode* sortList(ListNode* head) { return sortList(head, nullptr); } ListNode* sortList(ListNode* head, ListNode* tail) { if (head == nullptr) { return head;
2021-12-29 00:06:33
98
原创 LeetCode系列147—对链表进行插入排序
题意147.对链表进行插入排序题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next)
2021-12-28 23:58:51
504
原创 LeetCode系列62—不同路径
题意62.不同路径题意方法一:动态规划class Solution {public: int uniquePaths(int m, int n) { int dp[m][n]; for (int i = 0; i < m; i++) dp[i][0] = 1; for (int j = 0; j < n; j++) dp[0][j] = 1; for (int i =
2021-12-26 19:41:55
372
原创 LeetCode系列4—寻找两个正序数组的中位数
题意4. 寻找两个正序数组的中位数题解方法一:归并排序class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { vector<int> merged; int i = 0, j = 0; while(i < nums1.size() &&
2021-12-26 10:03:06
123
原创 LeetCode系列279—完全平方数
题意279. 完全平方数题解方法一:动态规划class Solution {public: int numSquares(int n) { vector<int> f(n + 1); for (int i = 1; i <= n; i++) { int minn = INT_MAX; for (int j = 1; j * j <= i; j++) { m
2021-12-23 12:27:09
314
原创 LeetCode系列322—零钱兑换
题意322. 零钱兑换题解方法一:记忆化搜索class Solution { vector<int>count; int dp(vector<int>& coins, int rem) { if (rem < 0) return -1; if (rem == 0) return 0; if (count[rem - 1] != 0) return count[rem - 1]; in
2021-12-23 12:14:52
661
原创 LeetCode系列337—打家劫舍 III
题意337. 打家劫舍 III题解方法一:动态规划class Solution {public: unordered_map <TreeNode*, int> f, g; void dfs(TreeNode* node) { if (!node) { return; } dfs(node->left); dfs(node->right); f[node]
2021-12-22 23:24:08
170
原创 LeetCode系列338—比特位计数
题意338. 比特位计数题解方法一:Brian Kernighan算法class Solution {public: int countOnes(int x) { int ones = 0; while (x > 0) { x &= (x - 1); ones++; } return ones; } vector<int> countB
2021-12-22 22:35:22
364
原创 LeetCode系列394—字符串解码
题意394. 字符串解码题解class Solution {public: string decodeString(string s) { string res; int n = s.size(); int i = 0; while(i < n) { if (isalnum(s[i]) && !isdigit(s[i])) { res.push_back(s[i]); i++; co
2021-12-22 20:56:08
543
原创 LeetCode系列406—根据身高重建队列
题意406.根据身高重建队列题解方法一:从低到高考虑class Solution {public: vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { sort(people.begin(), people.end(), cmp); int n = people.size(); vector<vec
2021-12-22 17:44:38
137
原创 LeetCode系列416—分割等和子集
题意416.分割等和子集题解方法一:动态规划dp[i][j]表示选取前i个元素,是否class Solution {public: bool canPartition(vector<int>& nums) { int sum = 0; int n = nums.size(); for(int i = 0; i < nums.size(); i++) sum += nums[i];
2021-12-22 16:59:27
126
原创 LeetCode系列437—路径总和 III
题意437. 路径总和 III题解方法一:深度优先搜索每一个节点都执行rootSum函数,rootSum不同于pathSum的地方在于,路径必须连续class Solution {public: int rootSum(TreeNode* root, int targetSum) { if (root == nullptr) return 0; int ret = 0; if (root->val == targetSum) ret+
2021-12-22 16:09:02
206
原创 LeetCode系列438—找到字符串中所有字母异位词
题意438.找到字符串中所有字母异位词题解方法一:滑动窗口维护一个定长的窗口,记录窗口内的状态class Solution {public: vector<int> findAnagrams(string s, string p) { vector<int> ans; vector<int> count1(26); vector<int> count2(26); int s_l
2021-12-22 15:18:56
98
原创 LeetCode系列448—找到所有数组中消失的数字
题意448. 找到所有数组中消失的数字题解方法一:标志数组class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int> res; int n = nums.size(); int flags[n]; memset(flags, 0, sizeof(int) * n
2021-12-19 20:22:02
70
原创 LeetCode系列461—汉明距离
题意461. 汉明距离题解方法一:内置位计数功能class Solution {public: int hammingDistance(int x, int y) { return __builtin_popcount(x ^ y); }};作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/hamming-distance/solution/yi-ming-ju-chi-by-leetcode-so
2021-12-19 19:54:53
93
原创 LeetCode系列494—目标和
题意494.目标和题解方法一:暴力搜索class Solution {public: int findTargetSumWays(vector<int>& nums, int target) { int ans = 0; int n = nums.size(); for (int i = 0; i < pow(2, n); i++) { int sum = 0; for
2021-12-04 00:33:58
137
原创 LeetCode系列538—把二叉搜索树转换为累加树
题意538. 把二叉搜索树转换为累加树题解方法一:反序中序遍历class Solution {private: int sum = 0;public: TreeNode* convertBST(TreeNode* root) { if (root == nullptr) return nullptr; TreeNode *right = convertBST(root->right); sum += root->val;
2021-12-02 19:38:58
478
原创 LeetCode系列543—二叉树的直径
题意543.二叉树的直径题解方法一:深度优先搜索class Solution { int ans; int depth(TreeNode* rt){ if (rt == NULL) { return 0; // 访问到空节点了,返回0 } int L = depth(rt->left); // 左儿子为根的子树的深度 int R = depth(rt->right); // 右儿子为根
2021-11-29 04:50:50
110
原创 LeetCode系列560—和为K的子数组
题意560.和为 K 的子数组题解方法一:枚举class Solution {public: int subarraySum(vector<int>& nums, int k) { int ans = 0; for (int i = 0; i < nums.size(); i++) { int sum = 0; for (int j = i; j >= 0; j--) {
2021-11-29 04:27:24
405
原创 LeetCode系列581—最短无序连续子数组
题意581. 最短无序连续子数组题解方法一:辅助数组class Solution {public: int findUnsortedSubarray(vector<int>& nums) { vector<int> nums_min(nums.size()); vector<int> nums_max(nums.size()); int min = 100001, max = -100001;
2021-11-29 02:59:37
247
原创 LeetCode系列617—合并二叉树
题意617.合并二叉树题解方法一:深度优先遍历class Solution {public: TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) { if (!root1) return root2; if (!root2) return root1; TreeNode* node = new TreeNode(root1->val + root2->val);
2021-11-29 01:56:25
259
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人