樂視筆試演算法題美團演算法筆試題

2021-08-27 22:06:55 字數 1459 閱讀 6447

今天參加了樂視的校招筆試題有一道以前很熟悉的一道題記錄一下

備註:今天樂視筆試好多圖的選擇題和執行緒間同步的方式一道選擇題(上次總結過)

給定乙個無序的整數陣列,怎麼找到第乙個大於

0,並且不在此陣列的整數。比如

[1,2,0]返回3

,[3,4,-1,1]返回2

,[1, 5, 3, 4, 2]返回6

,[100, 3, 2, 1, 6,8, 5]返回4

。要求使用

o(1)

空間和o(n)

時間。

這道題目初看沒有太好的思路,但是借鑑下《

白話經典演算法系列之十 一道有趣的google面試題

》這篇文章,我們不發現使用「基數排序」正好可以用來解決這道題目。

以為例來簡介這種解法:

從第乙個數字開始,由於a[0]=1,所以不用處理了。

第二個數字為3,因此放到第3個位置(下標為2),交換a[1]和a[2],得到陣列為。由於6無法放入陣列,所以直接跳過。

第三個數字是3,不用處理。

第四個數字是-100,也無法放入陣列,直接跳過。

第五個數字是2,因此放到第2個位置(下標為1),交換a[4]和a[1],得到陣列為,由於6無法放入陣列,所以直接跳過。

此時「基數排序」就完成了,然後再從遍歷陣列,如果對於某個位置上沒該數,就說明陣列缺失了該數字。如缺失的就為4。

這樣,通過第i個位置上就放i的「基數排序」就順利的搞定此題了。

**也非常好寫,不過在交換兩數時要注意判斷下兩個數字是否相等,不然對於像這樣的資料會出現死迴圈。

完整的**如下:

[cpp]view plain

copy

//【白話經典演算法系列之十六】「基數排序」之陣列中缺失的數字

//bymorewindows(

//歡迎關注

#include

void

swap(

int&a,

int&b)

intfindfirstnumbernotexistenceinarray(

inta,

intn)

void

printfarray(

inta,

intn)

intmain() ;

//inta[maxn]=;

inta[maxn]=;

//inta[maxn]=;

printfarray(a,maxn);

printf("該陣列缺失的數字為%d\n"

,findfirstnumbernotexistenceinarray(a,maxn));

return0;

}

美團上機筆試題:演算法

1給你1元5元10元50元100元面值的紙幣,組成n元的所有組合方式個數

2無序陣列隨機去取兩個,求兩個數之和不超過limit的最大值是

美團筆試演算法題 統計位數

題目 統計位數 輸出 樣例輸入 2 13417 4解題思路 沒有思路時,歸納 f n f n 表示n的統計位數 規律基本出來了,f n n 10k 1 1 k f 10k 1 1 f n n 10k 1 1 k f 10k 1 1 if10k 110k that is k floor log10n ...

樂視筆試題

1 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個正數組成子陣列,每個子陣列都有乙個和。求所有子陣列的最大值。時間複雜度o n 例如 輸入1,2,3,10,4,7,2,5 和最大的子陣列為3,10,4,7,2 因此輸出為該子陣列的和18 public class maxsubsum ...

美團網2014筆試演算法題彙總

1.鍊錶翻轉。給出乙個鍊錶和乙個數k,比如鍊錶1 2 3 4 5 6,k 2,則翻轉後2 1 4 3 6 5,若k 3,翻轉後3 2 1 6 5 4,若k 4,翻轉後4 3 2 1 5 6,用程式實現。include using namespace std struct listnode listn...