微軟等公司數據結構+算法面試100題---數組

1.(原第3題)
----------------------------------------------------------------------
求子數組的最大和
題目:
輸入一個整形數組,數組裏有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間複雜度爲O(n)。
例如輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2,
因此輸出爲該子數組的和18。


2.(原第5題)
------------------------------------
查找最小的k個元素
題目:輸入n個整數,輸出其中最小的k個。
例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字爲1,2,3和4。


3.(原第14題)
-----------------------------------------------------------------------
題目:輸入一個已經按升序排序過的數組和一個數字,
在數組中查找兩個數,使得它們的和正好是輸入的那個數字。
要求時間複雜度是O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。
例如輸入數組1、2、4、7、11、15和數字15。由於4+11=15,因此輸出4和11。


4.(原第32題)
-----------------------------------------------------------------------
有兩個序列a,b,大小都爲n,序列元素的值任意整數,無序;
要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
例如:   
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];


5.(原第35題)
-------------------------------------------------------------------------
求一個矩陣中最大的二維矩陣(元素和最大).如:
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的是:
4 5
5 3
要求:(1)寫出算法;(2)分析時間複雜度;(3)用C寫出關鍵代碼


6.(原第45題)
雅虎:
(1).對於一個整數矩陣,存在一種運算,對矩陣中任意元素加一時,需要其相鄰(上下左右)某一個元素也加一。
現給出一正數矩陣,判斷其是否能夠由一個全零矩陣經過上述運算得到。
(2).一個整數數組,長度爲n,將其分爲m份,使各份的和相等,求m的最大值
  比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;  
  {3,6}{2,4,3} m=2
  {3,3}{2,4}{6} m=3 所以m的最大值爲3
  
  
7.(原第47題)
--------------------------------------------------------------------------
創新工場:
求一個數組的最長遞減子序列 比如{9,4,3,2,5,4,3,2}的最長遞減子序列爲{9,5,4,3,2}


8.(原第48題)
--------------------------------------------------------------------------
微軟:
一個數組是由一個遞減數列左移若干位形成的,比如{4,3,2,1,6,5}
是由{6,5,4,3,2,1}左移兩位形成的,在這種數組中查找某一個數。


9.(原第49題)
--------------------------------------------------------------------------
一道看上去很嚇人的算法面試題:
如何對n個數進行排序,要求時間複雜度O(n),空間複雜度O(1)


10.(原第51題)
---------------------------------------------------------------------------
和爲n連續正數序列。
題目:輸入一個正數n,輸出所有和爲n連續正數序列。
例如輸入15,由於1+2+3+4+5=4+5+6=7+8=15,所以輸出3個連續序列1-5、4-6和7-8。
分析:這是網易的一道面試題。


11.(原第54題,原第83題(1))
---------------------------------------------------------------------------
調整數組順序使奇數位於偶數前面。
百度筆試:給定一個存放整數的數組,重新排列數組使得數組左邊爲奇數,右邊爲偶數。
要求:空間複雜度 O(1),時間複雜度爲 O(n)。


12.(原第61題)
---------------------------------------------------------------------------
找出數組中兩個只出現一次的數字
題目:一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。
請寫程序找出這兩個只出現一次的數字。要求時間複雜度是 O(n),空間複雜度是 O(1)。
分析:這是一道很新穎的關於位運算的面試題。


13.(原第68題)
----------------------------------------------------------------------------
把數組排成最小的數。
題目:輸入一個正整數數組,將它們連接起來排成一個數,輸出能排出的所有數字中最小的
一個。
例如輸入數組{32, 321},則輸出這兩個能排成的最小數字32132。
請給出解決問題的算法,並證明該算法。

分析:這是09 年6 月份百度的一道面試題,
從這道題我們可以看出百度對應聘者在算法方面有很高的要求。


14.(原第69題)
----------------------------------------------------------------------------
旋轉數組中的最小元素。
題目:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。輸入一個
排好序的數組的一個旋轉,
輸出旋轉數組的最小元素。例如數組{3, 4, 5, 1, 2}爲{1, 2, 3, 4, 5}的一個旋轉,該數
組的最小值爲1。
分析:這道題最直觀的解法並不難。從頭到尾遍歷數組一次,就能找出最小的元素,時間複雜度顯然是
O(N)。但這個思路沒有利用輸入數組的特性,我們應該能找到更好的解法。


15.(原第74題)
-----------------------------------------------------------------------------
數組中出現次數超過一半的數字
題目:數組中有一個數字出現的次數超過了數組長度的一半,找出這個數字。
分析:這是一道廣爲流傳的面試題,包括百度、微軟和 Google 在內的多家公司都
曾經採用過這個題目。要幾十分鐘的時間裏很好地解答這道題,
除了較好的編程能力之外,還需要較快的反應和較強的邏輯思維能力。


16.(原第79題(2))
------------------------------------------------------------------------------
編寫實現數組排序的一種算法。說明爲什麼你會選擇用這樣的方法?


17.(原第81題(1)(3))
------------------------------------------------------------------------------
(1).百度面試題
一個 int 數組,裏面數據無任何限制,要求求出所有這樣的數 a[i],其左邊的數都小於等於它,右邊的數都
大於等於它。能否只用一個額外數組和少量其它空間實現。
(2).快速排序(東軟喜歡考類似的算法填空題,又如堆排序的算法等)


18.(原第93題)
-------------------------------------------------------------------------------
在一個 int 數組裏查找這樣的數,它大於等於左側所有數,小於等於右側所有數。直觀想法是用兩個數組
a、b。a[i]、b[i]分別保存從前到 i 的最大的數和從後到 i 的最小的數,一個解答:這需要兩次遍歷,然後再遍
歷一次原數組,將所有 data[i]>=a[i-1]&&data[i]<=b[i]的 data[i]找出即可。給出這個解答後,面試官有要求只能
用一個輔助數組,且要求少遍歷一次。


19.(原第94題)
------------------------------------------------------------------------------
微軟筆試題
求隨機數構成的數組中找到長度大於=3 的最長的等差數列, 輸出等差數列由小到大:
如果沒有符合條件的就輸出
格式:
輸入[1,3,0,5,-1,6]
輸出[-1,1,3,5]
要求時間複雜度,空間複雜度儘量小


20.(原第95題(2))
-------------------------------------------------------------------------------
用遞歸的方法判斷整數組 a[N]是不是升序排列
發佈了27 篇原創文章 · 獲贊 6 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章