解法一:若二进制末尾为1,则除以2余1;int count(int a){ int num=0; while(a) { if(a%2==1) ++num; a=a/2; } return num;}解法二:使用移位操作相...
分类:
其他好文 时间:
2014-08-09 21:26:59
阅读次数:
289
给定一个长度为N的整数数组,只允许用乘法不允许用除法,计算N-1个数组合的乘积最大的一组,并写出算法的时间复杂度。long long s[MAXN];long long t[MAXN];int main(){ int n, i; cin >> n; for (i=1; i> A[i...
分类:
其他好文 时间:
2014-08-09 18:14:28
阅读次数:
206
题目来源:编程之美2.18
有一个无序的,元素个数为2n的正整数的数组,要求:
如何能把这个数组分割为元素个数为n的两个数组,使得两个子数组的和尽量接近。
解析:因为两个子数组的和是一定的,等于整个数组的和。现在要求使得两个字数组的和尽量的接近,也就意味着要从其中选出n个数使得这n个数的和尽可能的接近sum/2,不妨设为从小于sum/2的方向接近。于是,这就是一个01背包的问题:
...
分类:
其他好文 时间:
2014-08-07 15:48:00
阅读次数:
197
1.把c++primer读完。2.好好读一下编程之美这本书。3.开始读算法导论。4.仔细刷一下AC自动机的题,学一下二叉平衡树等数据结构。5.强化一下DP,搜索等题型。6.学一下python,也熟练一下java。7.多动脑,多思考。等到八月底再来补充这篇文章,看完成情况如何。
分类:
其他好文 时间:
2014-08-03 20:21:35
阅读次数:
201
假设有数n
以前用除二取余法 复杂度logn 不多说
有一个logv的方法 v为1的个数 复杂度比logn小
int Count(int x)
{
int ans = 0;
while(x)
{
x &= (x-1);
ans++;
}
return ans;
}
这里用到了位运算 x&(x-1)每次去掉一个1 举个例子
100010001000&(10...
分类:
其他好文 时间:
2014-07-31 20:55:27
阅读次数:
225
后来一版作者又将最后一句改为:”要求在代码中只能使用一个字节存储变量“。我的解法:package android.zlb.java;/** * * @author zhanglibin * */public class TestXiangqi { public static void mai...
分类:
其他好文 时间:
2014-07-25 02:42:24
阅读次数:
209
1 /* 2 编程之美题,给定N个数的数组,只能使用乘法,不使用除法,找出N-1个数的乘积最大的一组,有两种方法,方法一:采用两个数组分别保存从左向右 3 和从又向左的两个乘积值,然后在扫描一次,求出最大乘积,空间换时间的方法。 4 方法二:通过分析这些数的性质,看有多少正数,多少负数,多...
分类:
其他好文 时间:
2014-07-25 02:25:04
阅读次数:
267
情形一:不允许首尾相连
此情况很常见,方法是动态规划,编程之美的方法三给出了解法,这里就直接给出代码了
int maxSubSum(vector& data)
{
int length = data.size();
assert(length >= 0);
int maxSum = data[length-1],startSum = data[length-1],begin = leng...
分类:
其他好文 时间:
2014-07-23 13:28:36
阅读次数:
197
层次遍历的算法参考自【编程之美】,源代码中使用了stl的vector实现动态扩展属性,在java里面List的特点很符合要求,故将此处改为ArrayList。...
分类:
编程语言 时间:
2014-07-22 22:38:35
阅读次数:
427
情形一:不允许首尾相连
此情况很常见,方法是动态规划,编程之美的方法三给出了解法,这里就直接给出代码了
int maxSubSum(vector& data)
{
int length = data.size();
assert(length >= 0);
int maxSum = data[length-1],startSum = data[length-1],begin = leng...
分类:
其他好文 时间:
2014-07-22 17:54:40
阅读次数:
197