有一道java面試題 不知道該怎麼做

時間 2021-06-01 23:34:06

1樓:Elliot

用bitmap演算法,O(n),就可以實現,當然hash也可以實現,只不過hash演算法要設計好,不能有衝突。這道題資料量還是太小,用hashtable更合適,如果資料量再大就用bitmap更合適了。

因為數字為int,而有符號的int最大值為23億,unsigned int最大為42億多,假設題目是有符號的,則建立乙個23億大小的bit陣列,轉為成int陣列即為(23億/32 + 1)長度(int為4位元組,32bit位),記憶體消耗為23億/8/1024/1024大約等於271M,記憶體完全可以滿足。因為題目要求只統計相同的對數。所以在設定乙個統計的變數sum。

假如該bit位上值為1,說明之前有過該值了。

下面是bitmap演算法的舉例說明:

所謂的bitmap就是用乙個bit位來標記某個元素對應的value,而key則是該元素。由於採用bit為單位來儲存資料,因而可以大大節省記憶體空間,因此bitmap多用於對打資料上。

下面通過乙個例子來了解bitmap:

假設我們要對0-7內5個數(4,2,2,3,3)統計重複,那麼我們可以用bitmap來實現。

首先我們用普通方法表示這個5個數,我們需要5byte。再來看看用bitmap來表示,因為數值範圍為0-7,即最多8個數,則只需要8bit,即為1byte。具體方法如下:

1、首先分配1byte空間,所有bit位賦值0,如下:

00000000

2、然後遍歷這5個數,第乙個數為4,則把第4個bit位賦值1

00010000(從0計數,從右往左)

3、以此類推,剩餘計算過程如下:

00010100(第二個數2)

00010100(第三個數2,因為該位已經為1,所以sum++)

00011100(第四個數3)

00011100(第五個數3,該位已經為1,sum++)

最後sum為2,即重複數字對數。時間複雜度為O(n),記憶體佔用量為270M左右。

2樓:

先排序,氣泡排序?快速排序?歸併排序?

再迴圈比較:將第n個和第n+1個元素對比。

如果兩者相等,相等的元素個數+1,開始下一次比較,比較第n+2,第n+3個元素。

如果不等,開始下一次迴圈,比較第n+1,第n+2個元素。

如此直到沒有元素能夠比較為止。

一道網易 JS 面試題,有哪些解題思路?

張文軒 顯然是不可以的,a是number型別,六種基本型別的一種,基本型別是不會有方法的,但是有時候發現基本型別也能呼叫一些方法,是因為在呼叫這些方法之前會建立對應的包裝型別,比如Number包裝型別,然後基本型別就可以使用包裝型別的方法,但是呼叫之後,這個包裝型別就會被銷毀,所以a.b為undef...

喜歡上了乙個男生,但他有女朋友了,不知道該怎麼辦?

傲啊傲 建議你果斷放棄吧。我有女朋友以後,曾經有女生喜歡過我好久,被我噴了十幾次以後連普通朋友都沒得做。即使沒有鬧掰,最後你也僅僅會淪為備胎 卞雀蘭若 沒有什麼怎麼辦!克制一下自己的感情吧!在明知道對方有物件的情況下還想做點什麼那是小三!這種行為不可取,你唯一該做的就是放下這段感情,趁著沒有深陷其中...

辭職後一直找不到工作,真的好迷茫,不知道該怎麼辦?

樂樂郭 這是大部分年輕人的常態。你覺得迷茫,說明你至少你思考過,只是沒有結果。或許你可以先從觀察自己開始,深刻的認識自己後,你便不會迷茫。觀察自己的一舉一動一言一行以及情緒感受,深入的了解自己,知道自己的優勢弱勢和喜好,最後也就知道了自己想成為什麼樣的人,想做什麼樣的事。祝你走出迷茫,前程似錦。 明...