算法训练营Day5
242. 有效的字母异位词 242. 有效的字母异位词 - 力扣(LeetCode) 12345678910111213141516class Solution {public: bool isAnagram(string s, string t) { if (s.size() != t.size()) { return false; } std::map<char, size_t> ms{}; std::map<char, size_t> mt{}; for (size_t i = 0; i < s.size(); i++) { ++ms[s[i]]; ++mt[t[i]]; } return ms == mt; ...
算法训练营Day4
24. 两两交换链表中的节点 24. 两两交换链表中的节点 - 力扣(LeetCode) 12345678910111213141516171819202122232425262728293031323334353637/** * 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) : val(x), next(next) {} * }; */class Solution {public: ListNode* swapPairs(ListNode* head) { ...
算法训练营Day3
203. 移除链表元素 203. 移除链表元素 - 力扣(LeetCode) 12345678910111213141516171819202122232425262728/** * 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) : val(x), next(next) {} * }; */class Solution {public: ListNode* removeElements(ListNode* head, int val) { ListNode...
算法训练营Day2
209. 长度最小的子数组 209. 长度最小的子数组 - 力扣(LeetCode) 12345678910111213141516171819202122class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { if (nums.empty()) { return 0; } size_t left{}; size_t right{}; int total{}; set<size_t> ans_set{}; while (right < nums.size()) { total += nums[right]; while (total >=...
算法训练营Day1
704. 二分查找 704. 二分查找 - 力扣(LeetCode) 123456789101112131415161718192021class Solution {public: int search(vector<int>& nums, int target) { size_t left{}; size_t right{nums.size() - 1}; while (left <= right) { size_t mid{left + (right - left) / 2}; if (nums[mid] == target) { return mid; } else if (nums[mid] < target) { left = mid + 1; ...
Go并发模式
A boring function 1234567891011121314151617package mainimport ( "fmt" "time")func boring(msg string) { for i := 0; ; i++ { fmt.Println(msg, i) time.Sleep(time.Second) }}func main() { boring("boring!")} Slightly less boring 123456789101112131415161718package mainimport ( "fmt" "math/rand" "time")func boring(msg string) { for i := 0; ; i++ { fmt.Println(msg,...
uv的使用
1234567891011uv venv --python python3.12# 从 requirements.txt 安装uv pip install -r requirements.txt# 同时安装和同步到 requirements.txtuv pip sync requirements.txt# 导出当前环境的依赖到 requirements.txtuv pip freeze > requirements.txt# 只包含直接安装的包(不包含依赖的依赖)uv pip freeze --exclude-editable > requirements.txt# 以兼容 pip 的格式导出uv pip freeze --format pip > requirements.txt
从类型论的角度看Rust的生命周期
Rust的生命周期尽管细化了一些编程语言中的类型,但没有细化完全,或者说在Rust中有些符号滥用,关系表示的并不是那么明晰。用不严谨的类型论的符号可以表示如下。需要注意的就是生命周期可以视作类型的“类型”,用T : 'a表示,而生命周期之间的关系则是同一层级的类型之间的关系用'a <: 'b表示'a的生命周期长于'b。 12345678910111213'static 是 'a 的子类型, 'a 是 'b 的子类型, 即: 'static <: 'a <: 'bi32 : 'staticString : 'staticT : 'static若T : 'static, 则&T = &'a T : 'a. 这里的&T似乎应该视作&'a T. 万恶的自动推导将细节隐藏起来了. 暴论: Rust的学习难度就是因为这些干扰语言一致性的语法糖造成的。若T : 'a,...
Cpp指针、引用 VS Rust所有权、借用
Rust的所有权与变量遮蔽有关,与C++的移动语义还是有一些区别。比如在C++下述操作中const变量d和j并不会随std::move而清空: 123456789std::string a{"1"};std::string b{"12"};std::string c{"123"};std::string const d{"1234"};std::string i{std::move(a)};i = std::move(b);i = std::move(d);std::string const j{std::move(c)};std::string const k{std::move(j)}; 对于引用: 123456789101112131415161718std::string a{"1"};std::string...
引用折叠、万能引用和完美转发
本文给出引用折叠、万能引用和完美转发的相关代码。需要注意的是万能引用(T &&arg)中匹配的类型T,要么是U,要么是U&&。forward的返回值,要么是不具名左值引用,要么是不具名右值引用。在wrapper中,对forward的调用,要么是forward<U>(U &&arg),要么是forward<U&>(U...