编程之美
文章平均质量分 61
bladeLight
这个作者很懒,什么都没留下…
展开
-
寻找最大的K个数--递归解法
算法思想:使用快排中的思想,随机从数组中选择一个元素x,将数组元素分成两部分Sa和Sb,其中Sa>x,Sb 1. Sa中元素个数小于K,Sa中所有的数和Sb中最大的K-length(Sa),就是S中最大的K个数; 2. Sa中元素个数大于或者等于K,则需要返回Sa中最大的K个数。 不断进行递归,能够得到问题的解。 //寻找最大的K个数 #include #include using n原创 2012-09-04 20:17:20 · 1608 阅读 · 0 评论 -
编程之美
#include #include #include #include #include #include using namespace std; map mp; string str[105]; string des; int T,N,M; int main(){ scanf("%d",&T); int cases=0; while(T--){ cases++; if(!mp原创 2013-04-06 20:47:45 · 938 阅读 · 0 评论 -
微软一道选择题
#include #include using namespace std; vector f(){ vector v(3); printf("%d\n",&v); return v; } int main(){ vector v=f(); printf("%d\n",&v); system("pause"); return 0; }原创 2013-03-09 23:51:09 · 521 阅读 · 0 评论 -
编程之美-二分查找练习题
//查找任意一个i,使得arr[i]等于v,不存在返回-1 int bsearch_any_i(int arr[],int l,int r,int v){ int left=l,right=r; while(left<=right){ int mid=left+(right-left)/2; if(arr[mid]<v) l原创 2013-02-24 12:04:18 · 977 阅读 · 0 评论 -
编程之美-程序改错及扩展问题
原文的大意是这样的,要求写一个二分查找算法,并且当要查找的数出现不止一次时,返回最后那个数的下标。然后给你一段有错的代码,请你改。 这段有错的代码是这样的(我作了简化): [cpp] view plaincopy /* b和e是查找区间的两端,v是要找的数 */ int bsearch(int a[], int b, int e, int转载 2013-02-23 15:44:07 · 331 阅读 · 0 评论 -
整数划分问题
1、已知正整数n,求解将n划分成最大因子不超过m的划分的个数,用f(n,m)表示,其中m>=1,n>=1。 分情况讨论: 1> m==1或n==1时,只能将n表示成全是1的形式 2> 一般情况 1) m>n时,这种情况是没有意义的,由于划分成的各个数字都是正整数,所以f(n,m)=f(n,n) 2) m==n时原创 2013-01-24 16:56:37 · 352 阅读 · 0 评论 -
全排列问题
//全排列问题 //一开始没有加入那一句,比如输入是123,结果为 //123 132 312 321 123 132,原因是交换的时候应该基于以前那个不变数组,因为321交换之后为123,所以重复了 #include #include #include using namespace std; void print(vector &v){ for(int i=0;i<v.size(原创 2012-12-26 17:02:38 · 300 阅读 · 0 评论 -
从无头单链表中删除节点
//编程之美上的题目,这个题目有两个限制条件,被删除的节点不能是第一个和最后一个 //1.不能删除最后一个节点的原因是,将会导致倒数第二个节点指向一个被删除的指针 //2.为什么不能删除第一个节点? //使用了狸猫换太子技术,删除下一个节点,将下一个节点的数据拷贝到上一个节点 #include #include #include typedef struct Node{ int da原创 2012-12-26 11:09:50 · 514 阅读 · 0 评论 -
寻找最大数和最小数
//寻找最大值和最小值 #include using namespace std; struct MaxMin{ int max; int min; }; int a[]={1,2,3,4,5,6,7,8,9,10}; MaxMin findMaxMin(int a[],int from,int to){ if(to-from==1){ int max,min; if(a[fr原创 2012-09-04 22:17:54 · 674 阅读 · 0 评论 -
数组分割
编程之美上的题目,是一道dp的题目,设dp[i][v]表示是否可以找到i个数,使得他们的和为v,是的话,dp[i][v]=1,否则为0。 状态转移方程:dp[i][v]=dp[i-1][v-arr[k]] if(v>=arr[k]&&dp[i-1][v-arr[k]]=1),边界条件是dp[0][0]=1 代码还是参考编程之美上的: //对于每一个物品 for(int k=1;k<=2原创 2013-03-25 18:14:20 · 1347 阅读 · 0 评论