標籤:串連 中國股市 代碼 開始 通過 topic 記錄 nbsp int
小米2015筆試編程題1.[編程題] 懂二進位
時間限制:1秒
空間限制:32768K
世界上有10種人,一種懂二進位,一種不懂。那麼你知道兩個int32整數m和n的二進位表達,有多少個位(bit)不同嗎?
輸入例子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
風口之下,豬都能飛。當今中國股市牛市,真可謂“錯過等七年”。 給你一個回顧曆史的機會,已知一支股票連續n天的價格走勢,以長度為n的整數數組表示,數組中第i個元素(prices[i])代表該股票第i天的股價。 假設你一開始沒有股票,但有至多兩次買入1股而後賣出1股的機會,並且買入前一定要先保證手上沒有股票。若兩次交易機會都放棄,收益為0。 設計演算法,計算你能獲得的最大收益。 輸入數值範圍:2<=n<=100,0<=prices[i]<=100
輸入例子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
git是一種分布式代碼管理工具,git通過樹的形式記錄檔案的更改曆史,比如: base‘<--base<--A<--A‘ ^ | --- B<--B‘ 小米工程師常常需要尋找兩個分支最近的分割點,即base.假設git 樹是多叉樹,請實現一個演算法,計算git樹上任意兩點的最近分割點。 (假設git樹節點數為n,用鄰接矩陣的形式表示git樹:字串數組matrix包含n個字串,每個字串由字元‘0‘或‘1‘組成,長度為n。matrix[i][j]==‘1‘若且唯若git樹種第i個和第j個節點有串連。節點0為git樹的根節點。)
輸入例子1:
[01011,10100,01000,10000,10000],1,2
輸出例子1:
1
分析:題意沒太理解,理解了再補充
小米2015筆試編程題