随笔分类 - C++
摘要:1 核心思想:将字符串看成P进制数,P的经验值是131或13331,取这两个值的冲突概率低 2 小技巧:取模的数用2^64,这样直接用unsigned long long存储,溢出的结果就是取模的结果 3 4 typedef unsigned long long ULL; 5 ULL h[N], p
阅读全文
摘要:1 void nextPermutation(vector<int>& nums) 2 { 3 int n = nums.size(); 4 int j = n - 2; 5 for(;j >= 0;j --) //从数组的末尾往前找,找到 第一个位置 j,使得 nums[j] < nums[j +
阅读全文
摘要:1、计算(i,j)的前缀和 2、求(x1,y1)- (x2,y2)子矩阵的和
阅读全文
摘要:class Solution { public: int countSubstrings(string s) { int result = 0; for (int i = 0; i < s.size(); i++) { result += extend(s, i, i, s.size()); //
阅读全文
摘要:题目: 给你一个 m * n 的矩阵 seats 表示教室中的座位分布。如果座位是坏的(不可用),就用 '#' 表示;否则,用 '.' 表示。 学生可以看到左侧、右侧、左上、右上这四个方向上紧邻他的学生的答卷,但是看不到直接坐在他前面或者后面的学生的答卷。请你计算并返回该考场可以容纳的一起参加考试且
阅读全文
摘要:#include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 20,M = 1 << 20; int n; int w[N][N]; //1、哪些点被用过 //2、目前停在
阅读全文
摘要:01背包 容量为j,最大价值总和为dp[j] 1 void test_1_wei_bag_problem() { 2 vector<int> weight = {1, 3, 4}; 3 vector<int> value = {15, 20, 30}; 4 int bagWeight = 4; 5
阅读全文
摘要:1 // 1、如果当前节点没有左儿子,则打印当前节点的值,然后进入右子树; 2 // 2、如果当前节点有左儿子,则找当前节点的前驱。 3 // (1) 如果前驱节点的右儿子为空,说明左子树没遍历过,则进入左子树遍历,并将前驱节点的右儿子置成当前节点,方便回溯; 4 // (2) 如果前驱节点的右儿子
阅读全文
摘要:1 // 快排的话有两个函数,一个函数是找到一个标准值,使标准值左边的都比标准值小,标准值右边的都比标准值大, 2 // 另一个就是快排的函数了,每调用一次快排的函数就将确定标准值的位置,如此循环往复,最终也就确定了最终的排序。 3 int partition(int num[],int start
阅读全文
摘要:1 void BST(TreeNode root, int target) 2 { 3 if (root.val == target) 4 // 找到目标,做点什么 5 if (root.val < target) 6 BST(root.right, target); 7 if (root.val
阅读全文
摘要:1 状态显然有三个:开始的索引 i,结束的索引 j,当前轮到的人 2 dp[i][j][fir or sec] 3 其中: 4 0 <= i < piles.length 5 i <= j < piles.length 6 7 n = piles.length 8 for 0 <= i < n: 9
阅读全文
摘要:1 void traverse(ListNode* head) 2 { 3 if(!head) return; 4 //cout << head->val << " "; // 正序访问链表 5 traverse(head->next); 6 //cout << head->val << " ";
阅读全文
摘要:1 dp[i][k][0 or 1] 2 0 <= i <= n-1, 1 <= k <= K 3 n 为天数,大 K 为最多交易数 4 此问题共 n × K × 2 种状态,全部穷举就能搞定。 5 6 for 0 <= i < n: 7 for 1 <= k <= K: 8 for s in {0
阅读全文
摘要:1 struct cmp 2 { 3 bool operator ()(vector<int> &a, const vector<int> &b) 4 { 5 // < :大顶堆 6 // > :小顶堆 7 return a[0]+a[1] > b[0]+b[1]; 8 } 9 }; 10 prio
阅读全文
摘要:1 for (int i=arr.size()-1;i>=0;--i) 2 { 3 srand((unsigned)time(NULL)); 4 swap(arr[rand()%(i+1)],arr[i]); 5 } [0,i]中随机选一个数,与第i个数交换
阅读全文
摘要:1 class Solution 2 { 3 public: 4 vector<int> maxSlidingWindow(vector<int>& nums, int k) 5 { 6 vector<int> res; 7 deque<int> q; 8 for(int i = 0;i < num
阅读全文
摘要:1 // 计算从起点 start 到终点 target 的最近距离 2 int BFS(Node start, Node target) { 3 Queue<Node> q; // 核心数据结构 4 Set<Node> visited; // 避免走回头路,大部分时候都是必须的,但是像一般的二叉树结
阅读全文
摘要:1、利用异或操作 ^ 和空格进行英文字符大小写互换 ('d' ^ ' ') = 'D' ('D' ^ ' ') = 'd' 2、判断两个数是否异号 int x = -1, y = 2; bool f = ((x ^ y) < 0); // true int x = 3, y = 2;bool f =
阅读全文
摘要:滑动窗口算法的思路是这样: 1、我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。 2、我们先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求(包含了 T
阅读全文
摘要:1 bool check(int x) {/* ... */} // 检查x是否满足某种性质 2 3 // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用: 4 int bsearch_1(int l, int r) 5 { 6 while (l < r) 7 { 8 in
阅读全文

浙公网安备 33010602011771号