小米2015筆試編程題

來源:互聯網
上載者:User

標籤:串連   中國股市   代碼   開始   通過   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筆試編程題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.