每日打卡-LeetCode-457-环形数组是否存在循环
环形数组是否存在循环
12345678910111213141516171819202122232425262728class Solution { public:  bool circularArrayLoop(vector<int>& nums) {    int n = nums.size(), Base = 10000;    // 遍历每个节点    for (int i = 0; i < n; i++) {      int last = -1;      // 用指针 k 指向当前节点      int k = i;      int t = nums[i] > 0;      int S = Base + i;      do {        // 计算从当前节点能够跳到下一个节点的编号        int p = ((k + nums[k]) % n + n) % n;        // 当前节点记录的值        last = nums[k];        // 标记当前节点为已访问 ...
每日打卡-LeetCode-847-访问所有节点的最短路径
访问所有节点的最短路径
1234567891011121314151617181920212223242526272829class Solution { public:  int shortestPathLength(vector<vector<int>>& graph) {    int n = graph.size();    queue<tuple<int, int, int>> q;    vector<vector<int>> seen(n, vector<int>(1 << n));    for (int i = 0; i < n; i++) {      q.emplace(i, 1 << i, 0);      seen[i][1 << i] = true;    }    int ans = 0;    while (q.size()) {      auto [u, mask, d ...
每日打卡-LeetCode-611-有效三角形的个数
有效三角形的个数
123456789101112131415161718class Solution { public:  int triangleNumber(vector<int>& nums) {    sort(nums.begin(), nums.end());    int n = nums.size();    int ans = 0;    // i 指向最长的边    for (int i = 0; i < n; i++) {      // j 指向第二长的边      for (int j = i - 1, k = 0; k < j; j--) {        // k 指向最短的边        while (k < j && nums[k] + nums[j] <= nums[i]) k++;        ans += j - k;      }    }    return ans;  }};
标志寄存器
标志寄存器的 3 种作用:
存储相关指令的某些执行结果
为 CPU 执行相关指令提供行为依据
用来控制 CPU 的相关工作方式
flag 寄存器是按位起作用的,每一位有专门的含义,记录特定信息。
 ZF 标志
Zero Flag,零标志位,记录相关指令执行后,其结果是否为 0。结果为 0 时 zf = 1,否则 zf = 0。
大多运算指令(逻辑、算术运算)的执行对标志寄存器有影响。传送指令例如:mov、push、pop 对标志寄存器没有影响。
 PF
Plural Flag,奇偶标志位,记录相关指令执行后,其结果的所有 bit 位中 1 的个数如果为偶数,pf = 1,如果为奇数,pf = 0。
 SF 标志
Sign Flag,记录相关指令执行后,其结果是否为负。如果结果为负,sf = 1,如果非负,sf = 0。
 CF 标志
Carry Flag,进位标识位。进行无符号数运算时,记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
 OF 标志
Overflow Flag,进行有符号数运算时,如果超过了机器所能表示的范围成为溢出。
CF 和 OF 所表示的进位 ...
每日打卡-LeetCode-1337-矩阵中战斗力最弱的K行
矩阵中战斗力最弱的 K 行
通过这道题学习一下 C++ 中常用的库函数:upper_bound、lower_bound、rbegin、rend、distance、greater<int>()、move
upper_bound 上界,返回大于某个数的第一个位置。
lower_bound 下界,返回大于等于某个数的第一个位置。
这两个函数用于在有序数组中查找某个元素出现的第一个位置和最后一个位置的下一个位置。
123456789vector<int> a = {1, 2, 2, 2, 3, 4};auto p = upper_bound(a.begin(), a.end(), 2);auto q = lower_bound(a.begin(), a.end(), 2);/*运行后,p、q 两个迭代器的指向如下:1, 2, 2, 2, 3, 4   q        p*/int d = distance(q, p); // d == 3 distance(开始, 结束),如果写反了 distance(p, q) == -3
distance(p, ...
LeetCode-15-三数之和
三数之和
这道题要不重不漏地找出数组中三数相加等于零的所有三元组。
12345678910111213141516171819202122class Solution { public:  vector<vector<int>> threeSum(vector<int>& nums) {    vector<vector<int>> res;    sort(nums.begin(), nums.end());    for (int i = 0; i < nums.size(); i++) {      // 跳过相同的数      if (i && nums[i] == nums[i - 1]) continue;      for (int j = i + 1, k = nums.size() - 1; j < k; j++) {        // 跳过相同的数        if (j > i + 1 && nums[j ...
社会现象一二
营造岁月静好,天下太平之像。例:坏事不提。
事不关己高高挂起,等针扎到自己身上才发出猪叫。例:教育改革,既得利益者,GFW。
不赚钱就不做,什么赚钱就一窝蜂涌入,做烂做臭做恶心,最后谁也没好。例:共享单车,抗日剧,网络小说。
坑蒙拐骗刻在基因里,缺乏信用体系,要么成为专家,要么被骗。买任何东西都要付出大量精力去研究。例:淘宝刷单,保险。
逆淘汰机制,劣币驱逐良币,恶性循环。例:996,不刷单的商家。
在自身利益上并不傻,反而都精明得很。例:抢票,考试,继承财产,薪酬,股权分配。
浮躁,实用主义至上,不喜欢深入学习,喜欢简单、捷径、速成、立刻看到效果的东西。
LeetCode-4-寻找两个正序数组的中位数
寻找两个正序数组的中位数
123456789101112131415161718192021222324252627282930313233343536class Solution { public:  double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {    int tot = nums1.size() + nums2.size();    if (tot % 2 == 0) {      int left = find(nums1, 0, nums2, 0, tot / 2);      int right = find(nums1, 0, nums2, 0, tot / 2 + 1);      return (left + right) / 2.0;    } else {      return find(nums1, 0, nums2, 0, tot / 2 + 1);    }  & ...
LeetCode-3-无重复字符的最长子串
无重复字符的最长子串
这道题使用滑动窗口。快指针写在 for 循环里,i++ 负责向前跑,慢指针写在 for 里面的 while 循环,只要满足一定条件,j++。
使用一个 map 维护当前滑动窗口内部的元素和它出现的次数。向前移动 i 指针,如果 [j, i] 窗口中有重复的元素,向前移动 j 直到窗口中没有重复的元素。窗口长度变化时记录窗口长度的最大值。
123456789101112131415class Solution { public:  int lengthOfLongestSubstring(string s) {    unordered_map<char, int> mp;    int res = 0;    for (int i = 0, j = 0; i < s.size(); i++) {      mp[s[i]]++;      while (mp[s[i]] > 1) {        mp[s[j++]]--;      }      res = max(res, i - j  ...
LeetCode-2-两数相加
两数相加
本题用链表的尾插法。从链表头开始向后走,用 c 累加两个数对应位置上的数值,将结果模 10 存入 new 出来的一个 ListNode,用尾插法插入到结果中。
12345678910111213141516171819202122232425262728293031/** * 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* addTwoNumbers(ListNod ...


