小米2015筆試編程題
阿新 • • 發佈:2017-08-24
時間 一個 註意 代碼管理 不同的 字符 結果 位運算 賣出
小米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 整數n8 * @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筆試編程題