文章分类 - 数据结构与算法
摘要:int n; scanf("%d", &n); int a[100]; for (int i = 0; i= y) rr--; a[ll] = a[rr]; while (ll(n - 1) / 2) return exquick(a, left, ll - 1, n);//如果中位数在它的左边,则在左区域寻找 return exquick(a, ll + 1, righ...
阅读全文
摘要:输入两个整数n 和m,从数列1,2,3…….n 中随意取几个数(不可重复), 使其和等于m ,要求将其中所有的可能组合列出来。 递归,知道sum ==0结束 每次尝试一个数,剩下的就是补差, 不尝试这个数,剩下的补 排列的话,有长度,逐个逐个的赋值,原始可重复,设定条件可过滤重复,一般会用到cur位
阅读全文
摘要:https://github.com/binbinmeng/algrithms_interview/wiki 一. 单链表相关问题 1. 链表的冒泡排序 2. 删除无头非尾节点 3. 反转链表递归或者三个指针(两个指针赋值,while循环,第三个指针赋值,交换值) 4. 在当前节点前插入一个数据x 5. 查找链表的中间节点。两个指针,一个2步,一个一步,当2步到结尾,一步则到中间 6. 删除单链...
阅读全文
摘要:解法一:辅助数组法。创建一个和原数组一样长度的数组,从原数组的尾部开始扫描,如果元素值是x,则忽略。 否则,将元素拷贝到新数组的末尾。扫描完原数组后,再在新数组未重新赋值的元素全部赋值为x。 最后再将新数组的所有元素赋值到原数组中。 假设原数组的长度为n,则算法的空间复...
阅读全文
摘要:vector findMax2(vectornum) { if (num.size() == 0)return num; vectorres(num.size()); int i = 0; stacks; while (i = num[i])//如果堆栈里面有的top元素比即将到来的元素大,则入栈,直到右边找到比top元素大的, { s.push(i++);//i增加,遍历...
阅读全文
摘要://找出两个数的和等于指定的T的所有组合 //塞入unordered_map里面 数组元素值, 对应的下标 遍历每个元素,找出需要的差值是否存在,且满足第二个数 大于等于第一个数,防止重复 /* 已知一个数是一个数组中两个数据之和,找出这个数组中某一对符合条件的数 例如:a[]={1,2,3,5,8} n=10,则输出{2,8} */ #include vector> find2T(in...
阅读全文
摘要:http://www.cnblogs.com/FJ-LinHua/p/9170621.html 线段树入门(分块讲解) 在一些题目涉及到区间修改和区间求和的情况,如果我们每次修改与求和的时间复杂度均为O(n)在大数据的情况下是会超时的,因此我们要引进一个维护一个区间的数据结构——线段树. [算法描述
阅读全文
摘要:#define MAX_WORD_CNT 4000 #define MAX_WORD_LEN 100 #define MAX_STRING_LEN 300000 int d[MAX_STRING_LEN]; typedef struct Trie { //生成字典树 #define MAX_NODE 100 #define MOD 20071027 int nodes[MA...
阅读全文
摘要:string make_symbol_stack(string opt) { stack symbol_stack; char result[100] = {'0'}; memset(result, 0, 100); int index = 0; int last_order = 0; int cur_order = 0; int symbol_to_order[128]...
阅读全文
摘要:https://www.jianshu.com/p/54893620ccc9
阅读全文
摘要:#include #include template void printList(T ptr_begin, T ptr_end) { T ptr; for (ptr = ptr_begin; ptr != ptr_end; ptr++) { cout listA; listA.push_back(1); listA.push_back(2); listA.push_b...
阅读全文
摘要://abscd[123]adf //输出abscd123adf //char s[1000]; //int next[1000]; //int cur = 0; //while (scanf("%s", s + 1) == 1) //{ // int len = strlen(s+1); // for (int i = 1; i <= len; i++) // { //...
阅读全文
摘要:void queen8(int n, int* C, int cur) { if (cur == n) { for (int i = 0; i int main(int argc, const char* argv[]) { //回溯法 //八皇后问题 //逐行 指定列数 //C[j] = i ; 第j行指定第i列 //每一行,遍历所有列尝试,逐行尝试 int C[8]; ...
阅读全文
摘要://生成1~n的子集 void subset_m(int *data, int n, int cur)//data 必须是有序的 { for (int i = 0; i out[cur - 1] && cur>=1) || cur == 0)//当前的元素必须比之前的选取的元素大 { out[cur] = data[i]; subset_m(data, out, n, cur...
阅读全文
摘要:int out[1000]; void perputation(int n, int cur) { if (cur == n) { for (int i = 0; i //多层循环的递归 此处中,以3个变量的循环作为例子 void circle(int* data, int n, int cur) { static int global_num = 1; if (cur...
阅读全文
摘要:void next_data(char mode[], int* next) { int i = 0; int k = 0; next[0] = 0; int str_len2 = strlen(mode); for (i = 1; i = 1)//k是从0开始,且匹配到的元素个数 { k = next[k - 1]; } if (mode[i] == mode[k]...
阅读全文
摘要:#include int partition(int a[], int l, int r){ int key = a[l], i = l, j = r; while (i= key) j--; if (i= r) return; //state 0 int mid = partition(a, l, r); qsort(a, l, mid - 1); //state 1...
阅读全文
摘要:typedef struct node { node* left; node* right; char x; }; struct record{ node* a; int state; record(node* a, int state) :a(a), state(state){} }; void CreateTree(node** root)//先序创建二叉树 { ch...
阅读全文
摘要:#include #include #include int cmp(int x, int y) { return x>y ? 1 : 0;//注意,这里返回的是0和1,不是x和y } int main(int argc, const char* argv[]) { //node* root; //CreateTree(&root); //printf("recursive_inor...
阅读全文
摘要:typedef struct Node { Node* lchild; Node* rchild; int data; } Node; int InsertTreeNode(int data, Node** root)//非递归式创建二叉排序树 { if (*root == NULL) { *root = (Node *)malloc(sizeof(Node)); (*ro...
阅读全文