那些算頻率的演算法,現在都怎麼樣了?

2021-09-11 10:59:15 字數 2381 閱讀 2136

面試題:陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字並輸出。比如 中 2 的次數是 4,陣列長度為 7,所以輸出 2。要求不能修改輸入的陣列。

這道題能思考到的測試用例比較簡單。

輸入符合條件的陣列,檢視列印是否滿足情況;

輸入不符合條件的陣列,檢視列印;

輸入只有乙個元素的陣列,檢視列印;

輸入無效陣列,檢視列印;

第二步便是我們的思考程式邏輯了,題目要求查詢出現次數超過一半的數字。比較容易想到的思路是直接對陣列排序,那中間那個值就是我們想要的值,但這樣的想法明顯排序後會對輸入的陣列順序有影響,所以我們可能需要換一種思路。

再看一遍題幹,我們不難思考到,我們是否可以對每個數字進行計數,最後返回計數次數最多的值。儲存次數採用 map 做對映處理。

public

class

test19

int times = len / 2;

// 查詢 map 中 value 最大的值

for (entryentry : map.entryset())

throw

new runtimeexception("invalid input!");

}public

static

void

main

(string args)

; system.out.println(morethanhalfnums(nums1));

int nums2 = ;

system.out.println(morethanhalfnums(nums2));

int nums3 = ;

system.out.println(morethanhalfnums(nums3));

int nums4 = ;

system.out.println(morethanhalfnums(nums4));

}}複製**

寫畢後進行測試用例的驗證,無不例外,目前都通過,於是我們把這樣的**解法遞交給面試官。

面試官看了這樣的演算法,表示他更期待的是不使用任何輔存空間的演算法。於是我們得換個角度思考。

陣列中有乙個數字出現的次數超過陣列長度的一半,也就是說它出現的次數比其他所有數字出現次數的和還要多。因此我們可以考慮在遍歷陣列的時候儲存兩個值: 乙個是陣列中的乙個數字, 乙個是次數。當我們遍歷到下乙個數字的時候,如果下乙個數字和我們之前儲存的數字相同,則次數加 1 ;如果下乙個數字和我們之前儲存的數不同,則次數減 1。如果次數為 0,我們需要儲存下乙個數字,並把次數設為 1 。由於我們要找的數字出現的次數比其他所有數字出現的次數之和還要多,那麼要找的數字肯定是最後一次把次數設為 1 時對應的數字。

我們來看這樣的思路用**怎麼實現。

public

class

test19

else

if (result == nums[i])

times++;

else

times--;

}times = 0;

for (int num : nums)

if (times > len / 2)

return result;

throw

new runtimeexception("invalid input!");

}public

static

void

main

(string args)

; system.out.println(morethanhalfnums(nums1));

int nums2 = ;

system.out.println(morethanhalfnums(nums2));

int nums3 = ;

system.out.println(morethanhalfnums(nums3));

int nums4 = ;

system.out.println(morethanhalfnums(nums4));

}}複製**

寫畢後,驗證測試用例,同樣全部通過。

本題最後的思路,希望大家刻意去思考和記憶一下,因為也許變一下題意,這樣的想法還可以用到。

面試題:輸入乙個整型陣列,陣列中有正數也有負數。陣列中乙個或多個整數形成乙個子陣列,求所有子陣列的和的最大值,要求時間複雜度為 o(n)。 比如輸入 ,能產生子陣列最大和的子陣列為 ,最大和為 18。

南塵,github 7k star,各大技術 blog 論壇常客,出身 android,但不僅僅是 android。寫點技術,也吐點情感。做不完的開源,寫不完的矯情,你就聽聽我吹逼,不會錯~

Hadoop現在怎麼樣了?

之前我們提到大資料的時候就會提到hadoop,hadoop是大資料的基礎框架,是大資料技術的代表。提到hdfs mapreduce yarn,提到hbase hive tez等hadoop生態圈中的乙個又乙個開源元件。但是最近好像有點不一樣了。曾經的三巨頭之一mapr向加州就業發展局提交檔案,稱如果...

那些離開私企進入國企的人,現在都過得怎麼樣了?

有人說,國企是養懶人的,私企才是年輕人奮鬥的 獵場 國企就像圍城一樣,外面的人想衝進來,裡面的人想逃出去。當然,沒有在私企和國企待過的人,都沒有底氣去評價哪個更好。我是16年中旬出來實習的,進入的是一家上市公司,月薪5.5k,職位是技術支援工程師。平時的工作也很簡單,接接 幫助客戶解決產品疑問。在轉...

被亞麻PIP的員工,後來都怎麼樣了?

當提起職場時,我們常常聯想到的是 辦公室政治 剷除異己 一類的事,這些事情可怕之處在於它就發生在我們身邊,尤其存在於擁有幾十年歷史的大廠裡。雖說 pip 制度從法律上來說是違規的,但對於亞麻來說,lay off pip pivot devlist之類的 考核 手段簡直就是家常便飯 不管是哪個等級的程...