标签:连接 中国股市 代码 开始 通过 topic 记录 nbsp int
时间限制:1秒
空间限制:32768K
输入例子1:
1999 2299
输出例子1:
7
分析:第一步求这两个数的异或,得到一个新的数,相同位是0,不同位是1;第二步采用位运算求这个数里边1的个数即为结果
1 class Solution { 2 public: 3 /** 4 * 获得两个整形二进制表达位数不同的数量 5 * 6 * @param m 整数m 7 * @param n 整数n 8 * @return 整型 9 */ 10 int countBitDiff(int m, int n) 11 { 12 int res=m^n; 13 int count=0; 14 while(res) 15 { 16 ++count; 17 res=(res-1)&res; 18 } 19 return count; 20 } 21 };
2.
时间限制:1秒
空间限制:32768K
输入例子1:
3,8,5,1,7,8
输出例子1:
12
分析:
计算两次交易机会所获收益最大值,则可以先正序遍历一遍记录第k天时第一次交易可以获得的最大收益,然后再后序遍历一次,记录第k天时后面有第二次交易可获的最大收益。再将第k天的两次交易最大值相加比较即可获得结果。注意,正序遍历时表示在第k天之前可以获得的最大收益,后序遍历表示第k天后面可以获得的最大收益。了两个收益相加就是最大收益。
1 class Solution { 2 public: 3 /** 4 * 计算你能获得的最大收益 5 * 6 * @param prices Prices[i]即第i天的股价 7 * @return 整型 8 */ 9 int calculateMax(vector<int> prices) { 10 int len = prices.size(); 11 vector<int> leftmax(len); 12 vector<int> rightmax(len); 13 14 //正序遍历 15 int primin = prices[0]; 16 leftmax[0] = 0; 17 for(int i=1;i<len;++i){ 18 primin = min(primin, prices[i]); 19 leftmax[i] = max(leftmax[i-1], prices[i] - primin); 20 } 21 22 //后序遍历 23 int primax = prices[len-1]; 24 rightmax[len-1] = 0; 25 for(int i=len-2;i>=0;--i){ 26 primax = max(primax, prices[i]); 27 rightmax[i] = max(rightmax[i+1], primax - prices[i]); 28 } 29 30 int pmax = 0; 31 for(int i=0;i<len;++i) 32 pmax = max(pmax, leftmax[i] + rightmax[i]); 33 return pmax; 34 35 } 36 };
3.[编程题] 小米Git
时间限制:1秒
空间限制:32768K
输入例子1:
[01011,10100,01000,10000,10000],1,2
输出例子1:
1
分析:题意没太理解,理解了再补充
标签:连接 中国股市 代码 开始 通过 topic 记录 nbsp int
原文地址:http://www.cnblogs.com/lxt1105/p/7424257.html