随笔分类 - Algorithm
摘要:#include <stdio.h> #include <stdlib.h> void set_bitmap(char* b, unsigned int i) { b[i / 8] |= 1 << (i & 7); } void unset_bitmap(char* b, unsigned int
阅读全文
摘要:cse.yorku.ca/~oz/hash.html
阅读全文
摘要:昨天面试,考查了跳表,事后实现了一下 struct Node { int val; Node *right, *down; Node(int val): val(val), right(NULL), down(NULL) {} Node(int val, Node* right, Node* dow
阅读全文
摘要:#include <iostream> #include <cstring> #include <vector> #include <unordered_map> #include <stack> using namespace std; class Solution { public: int e
阅读全文
摘要:您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入数值x。 删除数值x(若有多个相同的数,应只删除一个)。 查询数值x的排名(若有多个相同的数,应输出最小的排名)。 查询排名为x的数值。 求数值x的前驱(前驱定义为小于x的最大的数)。 求数值x的后继(后继定义为大于x
阅读全文
摘要:class Solution { public double myPow(double x, int n) { double res = 1; for(int i = n; i != 0; i /= 2) { if((i & 1) == 1) res *= x; x *= x; } return n
阅读全文
摘要:给定n组ai,bi,pi,对于每组数据,求出abii mod pi的值。 输入格式 第一行包含整数n。 接下来n行,每行包含三个整数ai,bi,pi。 输出格式 对于每组数据,输出一个结果,表示abii mod pi的值。 每个结果占一行。 数据范围 1≤n≤100000, 1≤ai,bi,pi≤2
阅读全文
摘要:#include <iostream> using namespace std; void percDown(int *q, int l, int r) { int i = l, j = 2 * i + 1; while(j <= r) { if(j + 1 <= r && q[j] < q[j +
阅读全文
摘要:有 N种物品和一个容量是 V 的背包,每种物品都有无限件可用。 第 i 种物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。 输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。 接下来有 N 行,每行两个
阅读全文
摘要:有N件物品和一个容量是V的背包。每件物品只能使用一次。 第i件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。 输入格式 第一行两个整数,N,VN,V,用空格隔开,分别表示物品数量和背包容积。 接下来有 NN 行,每行两个整
阅读全文
摘要:背包问题,这篇博客讲的很清晰 https://www.cnblogs.com/fengziwei/p/7750849.html
阅读全文
摘要:N皇后问题,我们在解决N皇后问题的时候,采用搜索的方法,dg记录的是左对角线的截距,udg记录的是右对角线的截距。之后便可以进行dfs进行求解了 #include <iostream> using namespace std; #define N 20 int n; bool col[N], dg[
阅读全文
摘要:逆序对板子,我们在求逆序的时候,仅仅需要进行在归并排序上加上 mid - i + 1即可 #include <iostream> using namespace std; typedef long long LL; const int N = 100010; int n, q[N], tmp[N];
阅读全文
摘要:归并排序原理如下: 我们首先进行对半划分,我们选择中间那个数字,之后把左右两个数组进行按位比较,组成一个新数组,之后再放回去。 紧接着进行递归。 分析复杂度分析,推导详见快排,原理差不多,复杂度O(n logn),但是快速排序是不稳定的排序,而归并排序是一个稳定的排序。 int tmp[N]; vo
阅读全文
摘要:快速选择原理如下,选择第k大的数字: 我们在快速选择的时候,也同样用了划分的思想,随机选择一个中轴,双指针i, j,指针i从左往右扫描,指针j从右往左扫描,如果i < j 则进行交换,并且继续循环,直到遇到中轴,这时候我们的i和j均为中轴(理由:因为i,j相等),如果数字在中轴的左边,则向左递归,如
阅读全文
摘要:快速排序原理如下: 我们在排序的时候,用到了划分的思想,随机选择一个中轴,双指针i, j,指针i从左往右扫描,指针j从右往左扫描,如果i < j 则进行交换,并且继续循环,直到遇到中轴,这时候我们的i和j均为中轴(理由:因为i,j相等)。我们在中轴左右递归,假设递归到了最后,也就交换了最后两个数。
阅读全文
摘要:⛵️PAT总复习 这篇文章是关于一个PAT的总复习,整理以备复习参考。可能包含不全,我列出了一些易错点 🏖1.多项式 甲级1002.A+B for Polynomials题,多项式中,个人认为,多项式用最快的方法就是map进行存储,然后进行依次打印。(1009.Product of Polyn
阅读全文
摘要:动态规划 (参考 "灯神视频" ) 1.fibnacci(热身) fibnacci问题如果我们直接递归求解,则花费时间复杂度为O(n^2),但是我们只要进行保存状态,则可以转化为O(n) i 1 2 3 4 5 6 7 8 (选中) prev(i) 0 0 0 1 0 2 3 5 (前面紧跟的) o
阅读全文