LeetCode-5-最长回文子串
最长回文子串
枚举字符串中的每个位置,以当前位置为中心向两边扩散,判断是否为回文串,并更新 res。
枚举字符串中的每个位置,以当前和右边位置中间的位置为中心向两边扩散,判断是否为回文串,并更新 res。
123456789101112131415161718192021222324252627282930class Solution { public: string longestPalindrome(string s) { string res; int n = s.size(); for (int i = 0; i < n; i++) { int l = i, r = i; while (l >= 0 && r < n) { if (s[l] != s[r]) { break; } if (r - l + 1 > res.size()) { res = s ...
科学使用 Github
Use SSH over HTTPS port
配置 ~/.ssh/config:
123456Host github.com HostName ssh.github.com ProxyCommand nc -v -x 127.0.0.1:1086 %h %p # 使用本地 socks 代理访问 Port 443 User git IdentityFile ~/.ssh/github
测试连通性:
123$ ssh -T git@github.comConnection to ssh.github.com port 443 [tcp/https] succeeded!Hi yelexin! You've successfully authenticated, but GitHub does not provide shell access.
每日打卡-LeetCode-1818-绝对差值和
绝对差值和
具体的,当我们处理到第 i 位时,假设该位的原差值为 x = abs(nums1[i] - nums2[i])x=abs(nums1[i]−nums2[i]),然后从 sorted 数组中通过二分找到最接近 nums2[i] 的值,计算一个新的差值 nd(注意要检查分割点与分割点的上一位),如果满足 nd < x 说明存在一个替换方案使得差值变小,我们使用变量 maxn 记下来这个替换方案所带来的变化,并不断更新 maxn。
12345678910111213141516171819202122232425262728293031323334353637class Solution { public: int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size(); int maxn = 0; int mod = 1e9 + 7; int sum = 0; // 将 nu ...
每日打卡-LeetCode-218-天际线问题
天际线问题
本题需要用到扫描线算法,不需要线段树(不需要区间查询)。
扫描线算法适合求由若干个矩形叠成的不规则图形的周长、面积问题。
本题需要输出所有横边的左端点,需要考虑一些边界情况。
首先需要找出所有竖边,求出所有竖边的顶点坐标存入一个 pair(pair 是双关键字排序),然后对这些坐标点进行排序。
排序时对于重合的两条竖边(横坐标一样,纵坐标不同)要分情况讨论:
假设两个点的坐标分别为 A(x, y)、B(x, z)。
A 点是某个矩形的左端点,B 点是某个矩形的左端点。纵坐标高的排在前面。
A 点是某个矩形的右端点,B 点是某个矩形的右端点。纵坐标低的排在前面。
A 点是某个矩形的左端点,B 点是某个矩形的右端点。A 点排在前面。
A 点是某个矩形的右端点,B 点是某个矩形的左端点。B 点排在前面。
总之,左端点重合,先大后小,右端点重合,先小后大,左右端点重合,先左后右。
在 pair 里面存左端点的时候,存负值。然后调用 sort 的时候就能自动实现上述排序规则。
1234567891011121314151617181920212223242526272829303 ...
CALL和RET指令
call 和 ret 都是转移指令,它们都修改 IP 或同时修改 CS 和 IP。共同用来实现子程序。
ret 和 retf
ret 指令用栈中的数据,修改 IP 的内容,实现近转移。
retf 指令用栈中的数据,修改 CS 和 IP 的内容,实现远转移。
CPU 指令 ret 指令时,相当于:
1pop IP
CPU 指令 retf 指令时,相当于:
12pop IPpop CS
示例代码:
1234567891011121314151617181920assume cs:codestack segment db 16 dup (0)stack endscode segment mov ax,4c00h int 21h start: mov ax,stack mov ss,ax mov sp,16 mov ax,0 push cs push ax mov bx,0 retf ;执行后 CS:IP 指向第一条指令,程序退出code end ...
每日打卡-LeetCode-主要元素
面试题 17.10. 主要元素
本题不难,如果要求时间复杂度 O(N),空间复杂度 O(1),只能用投票算法。
123456789101112131415161718192021class Solution { public: int majorityElement(vector<int>& nums) { int n = -1; int count = 0; for (auto x : nums) { if (count == 0 || x == n) { n = x; count++; } else { count--; } } count = 0; for (auto x : nums) { if (x == n) count++; } if (count > nums.size() / 2) return n; ret ...
每日打卡-LeetCode-930-和相同的二元子数组
和相同的二元子数组
先算前缀和
统计每一种前缀和出现的次数
遍历 nums,查询哈希表中元素 sum[j] − goal 的数量,进行累加
123456789101112131415161718192021class Solution { public: int numSubarraysWithSum(vector<int>& nums, int goal) { vector<int> s(nums.size() + 1); int ans = 0; for (int i = 1; i <= nums.size(); i++) { s[i] = s[i - 1] + nums[i - 1]; } // 用哈希表记录每一种前缀和 s[i] 出现的次数 unordered_map<int, int> mp; mp[0] = 1; // s[r] - s[l-1] = goal // s[l-1] = s[r] - goal f ...
每日打卡-LeetCode-1711-大餐计数
大餐计数
使用哈希表存储数组中的每个元素的出现次数,遍历到数组 deliciousness 中的某个元素时,在哈希表中寻找与当前元素的和等于 2 的幂的元素个数,然后用当前元素更新哈希表。
12345678910111213141516171819class Solution { public: const int mod = 1e9 + 7; int countPairs(vector<int>& d) { int maxVal = *max_element(d.begin(), d.end()); int maxSum = maxVal * 2; int pairs = 0; unordered_map<int, int> mp; int n = d.size(); for (auto& val : d) { for (int sum = 1; sum <= maxSum; sum <<= 1) { int count = ...
每日打卡-LeetCode-726-原子的数量
原子的数量
这道题需要递归来做。逻辑比较难想。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455class Solution { public: string countOfAtoms(string formula) { int k = 0; auto t = dfs(formula, k); string res; for (auto &[x, y] : t) { // 输出原子 res += x; // 如果原子个数大于 1,输出原子数量 if (y > 1) res += to_string(y); } return res; } map<string, int> dfs(string &str, int &u) { map<strin ...
每日打卡-LeetCode-LCP07-传递信息
原题链接
图的边权相等,统计优先步数到达某个节点的方案数一般用 BFS、DFS 就可以。
12345678910111213141516171819202122232425262728293031323334353637class Solution { public: int numWays(int n, vector<vector<int>>& r, int k) { unordered_map<int, unordered_set<int>> m; for (auto& x : r) { int a = x[0], b = x[1]; if (m.count(a)) { m[a].insert(b); } else { unordered_set<int> s; s.insert(b); m[a] = s; } } ...