2012年3月31日

求用1,2,5这三个数不同个数组合的和为100的组合个数

摘要: 这个题目其实很简单,直接利用dfs就出来,复杂度为O(100*50*20)可是看网上一个很好的分析,时间复杂度特别小。分析: 假设a*1 + b*2 + c*5 = 100;非常容易看出c的循环次数最小,那么枚举c开始c=0, a的取值为100,98,96,94,...,4,2,0c=1,a的取值为95,93,91,89,...,5,3,1c=2,a的取值为90,88,86,...,4,2,1c=3,a的取值为85,83,81,...,5,3,1.....c=19,a的取值为5,3,1c=20,a的取值0现在看出规律了吧,100以内的偶数+95以内的奇数+90以内的偶数+。。。+5以内的奇数+ 阅读全文

posted @ 2012-03-31 20:29 buptLizer 阅读(1929) 评论(0) 推荐(0) 编辑

查找两个已经排好序的数组的第k大的元素

摘要: 题目意思:给出两个排好序的数组 ,不妨设为a,b都按升序排列,及k的值,求出第k大的那个元素。分析这个题目,如果题目没有时间复杂度的要求,我们可以定义两个指针i,j分别指向a,b,如果a[i]<b[j]则i++否则j++,这个记录下走了多少步,如果==k步,则找到了第k大的元素,复杂度为O(k).那么如果有复杂度的要求,要求为O(log(len_a+len_b))呢,这个就得好好考虑,怎么利用二分来解决这个问题。解法一:假如第k大的数在a中,设置a[mid],那么肯定有b[k-mid-1]<=a[mid]<=b[k-mid],这是由于a中已经有mid个元素<a[mid] 阅读全文

posted @ 2012-03-31 20:19 buptLizer 阅读(4399) 评论(0) 推荐(0) 编辑

导航