随笔分类 - 数据结构与算法
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为
阅读全文
摘要:1 #include 2 3 void sort(int sz[], int low, int high) 4 { 5 int p = sz[low]; // 模仿快速排序,时间复杂度为o(n), 空间复杂度o(1) 6 while (low < high) 7 { 8 while (low < high && (sz[high] % ...
阅读全文
摘要:1 /** 2 * 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共需要多少种跳法。 3 */ 4 #include 5 6 // 递归算法 7 int faci(int n) 8 { 9 if (n == 0) 10 return 0; 11 else if (n == 1) 12 ...
阅读全文
摘要:1 #include 2 #include 3 4 /** 5 * 【数据结构 C描述】有两个整数集合 A 和 B 分别用两个线性表 LA 和 LB 表示, 6 * 求:一个新的集合C=A∪B,C仍然为纯集合,线性表采用链式存储方式。 7 * 注:本算法中LA, LB为递增有序情况,无序的话可以考虑暴力 8 * 此情况下复杂度为o(m+n), m, ...
阅读全文
摘要:1 #include 2 /**** 3 * 此算法为满二叉树通过先序遍历数组获得后序遍历数组 4 ***/ 5 // a[]为pre数组,b[]为post数组 6 void get_lrn_by_nlr(char a[], int a_left, int a_right, char b[], int b_left, int b_right) 7 { 8 if (...
阅读全文
摘要:1 #include 2 #include 3 4 int *temp; // 暂存数组 5 // 归并 6 void merge(int sz[], int m, int n, int p) 7 { 8 int i = m, j = n + 1, k = m; 9 while (i temp[j]) 12 sz[k++] = t...
阅读全文
摘要:#include #include using namespace std; // 将元素i向下调整 void adjust_down(int sz[], int i, int len) { int k; sz[0] = sz[i]; // sz[0]位置暂存 for (k = i sz[k] && k sz[0]) // 筛选结束 { ...
阅读全文
摘要:1 //问题描述: 试编写一个算法,使之能够在数组L[1...n]中找出第k小的元素(即从小到大排序后处于第k个位置的元素) 2 3 #include 4 5 // 结合快排思想,查找第5小函数 6 int find_the_minist_k(int sz[], int k, int low, int high) 7 { 8 int lowtemp = low, h...
阅读全文
摘要:1 #include 2 #include 3 using namespace std; 4 5 // 简单选择排序 6 void select_sort(int sz[], int len) 7 { 8 for (int i = 0; i < len; i++) 9 { 10 // 选择出剩余为排序子数组中最小(大)值,加到已排序子数组中...
阅读全文
摘要:1 #include 2 3 /** 4 * 快速排序因为是递归的,需要借助一个递归工作栈来保存每层递归调用的必要信息,其容量与递归调用的最大深度一致。 5 * 最好情况下为[log2(n+1)](上取整), 最坏情况下因为要进行n-1次递归调用,所以栈的深度为O(n),平均情况下栈的深度为O(log2n) 6 * 快速排序的平均时间复杂度为O(nlog2n),最坏情况下为...
阅读全文
摘要:#include // 希尔排序 void shell_sort(int sz[], int len) { // 对顺序表做希尔排序,本算法和直接插入排序相比,做了一下修改: //1.前后记录位置的增量是dk,不是1 //2.sz[0]只是暂存单元,不是哨兵 //3.希尔排序是不稳定的排序(当相同的关键字被划分到不同的子表中时,可能会改变他们的相对次序) ...
阅读全文
摘要:设有一个仅由红、白、蓝三种颜色的条块组成的条块序列,请编写一个时间复杂度为O(n)的算法,使得这些条块按红、白、蓝的顺序排好,即排成荷兰国旗图案。 1 #include 2 #include 3 using namespace std; 4 5 typedef enum 6 { 7 RED, 8 WHITE, 9 BLUE 10 } color; /...
阅读全文
摘要:1 #include 2 3 // 直接插入排序 4 void insert_sort(int sz[], int len) 5 { 6 for (int i = 2; i sz[0]; j--) 15 { 16 sz[j + 1] = sz[j]; 17 } 18 ...
阅读全文
摘要:Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 39044 Accepted Submission(s): 16
阅读全文
摘要:剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 28776 Accepted Submission(s): 17615 Problem
阅读全文
摘要:oval-and-rectangle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0 Pr
阅读全文
摘要:线段树将区间分成若干个子区间,子区间又继续分,直到区间为一个点(区间左值等于右值) 对于父区间[a,b],其子区间为[a,(a+b)/2]和[(a+b)/2+1,b] 用于求区间的值,如区间最值、区间的和等。 代码实现中,约定结点下标从1开始,所以某结点下标为x,那么左儿子下标为2x,右儿子下标为2
阅读全文
摘要:敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 121643 Accepted Submission(s): 50879 Problem
阅读全文
摘要:I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 100523 Accepted Submission(s): 37845 Pr
阅读全文
浙公网安备 33010602011771号