算法
Phoenix_FuliMa
这个作者很懒,什么都没留下…
展开
-
数m个数退出,JosePhus问题
void count(int data[], int interval) { int temp[N]; int m=0; int j=-1; while(1) { if(m == N) { break; } for(int k=0;k<interval;) { j=(j+1)%N; if(data[j]>-1) { k++; }原创 2012-03-11 14:03:51 · 452 阅读 · 0 评论 -
C++实现建立大根堆
#include using namespace std; void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } void adjust_heap(int *Array, int index, int len) { int cur = index; int right_child = 2 * (cur + 1)原创 2012-10-28 22:39:45 · 4292 阅读 · 0 评论 -
设计包含min函数的栈。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 #include using namespace std; #define MAX_SIZE 1000 typedef struct MinStackElement { int value; int min; }StackElement; class原创 2012-12-17 09:35:52 · 775 阅读 · 0 评论 -
求子数组最大值
题目: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1,-2,3,10,-4,7,2,-5,和最大的子数组为3,10,-4,7,2, 因此输出为该子数组的和18。 #include using namespace std; /* array原创 2012-12-17 19:29:33 · 754 阅读 · 0 评论 -
数组的全排列
#include using namespace std; void PrintPermutation(int n, int *A, int cur) { if(n == cur) { for(int i = 0; i < cur; i++) { printf("%d ", A[i]); } printf("\n"); } else { bool ok =原创 2012-12-17 20:48:13 · 600 阅读 · 0 评论 -
栈的压栈、出栈顺序
给定两个数组,数组A,数组B, A数组是压栈顺序,B数组是出栈顺序,判断B能否是A数组的出栈顺序。 举例: 数组A = {1,2,3,4,5}; 数组B= {4,5,3,2,1}; 则B是A的出栈顺序 #include #include using namespace std; bool IsPopOrder(const int *A, const int* B, int L原创 2013-01-06 09:03:21 · 2943 阅读 · 0 评论 -
和为sum的连续正整数序列
#include using namespace std; void Print(int i, int j) { for(int m = i; m <= j; m++) { cout<<m<<" "; } cout<<endl; } void FindContinuousSequence(int sum) { if( sum < 3 ) return ; int i = s原创 2013-01-31 10:37:18 · 811 阅读 · 0 评论