騰訊經典考點 出現次數超過一半的數

2021-10-07 20:13:19 字數 924 閱讀 2644

老題目了,有n個數,其中有乙個數出現的次數超過n/2,如何快速找出這個數

排序,如果乙個陣列中有乙個次數出現的次數超過陣列長度的一半了,那排序之後這個數一定在mid位置,返回mid位置的數就ok了

public static int solution1(int b)
做partition,利用快排的思想,在快排中,都會有乙個劃分函式partition,用於把資料分成大於基準值和小於基準值的兩部分。所以我們可以在陣列中隨機選擇乙個數字,以此作為基準值,進行劃分,劃分完成之後,如果其下標剛好是n/2,那麼它就是我們需要找的數。如果其下標小於n/2,則要找的數應該在它的右邊;如果其下標大於n/2,則要找的數應該在它的左邊。

int partition(int a, int begin, int end)

a[begin] = key;

return begin;

}int solution3(int nums, int n)

int left = 0, right = n - 1;

int mid = n / 2;

int index = partition(nums, left, right);

while (index != mid)

else

}return nums[mid];

}

利用hashmap,統計每個數出現的個數,然後去統計,和length/2作比較

public static void solution2(int b)  else 

}int j = 0, result = 0;

for (j = 0; j < map.size(); j++)

}system.out.println(b[j]);

}

出現次數超過一半的數字

題目 陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。乙個陣列中有很多數,現在我們要找出其中那個出現次數超過總數一半的數字,怎麼找呢?大凡當我們碰到某乙個雜亂無序的東西時,我們人的內心本質期望是希望把它梳理成有序的。所以,我們得分兩種情況來討論,無序和有序。如果無序,那麼我們是不是可以...

出現次數超過一半的數

時間限制 1000 ms 記憶體限制 65536 kb 提交數 315 通過數 126 給出乙個含有n 0 n 1000 個整數的陣列,請找出其中出現次數超過一半的數。陣列中的數大於 50且小於50。第一行包含乙個整數n,表示陣列大小 第二行包含n個整數,分別是陣列中的每個元素,相鄰兩個元素之間用單...

演算法 出現次數超過一半的數字

題目 陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。考慮到這個問題本身的特殊性,我們可以在遍歷陣列的時候儲存兩個值 乙個candidate,用來儲存陣列中遍歷到的某個數字 乙個ntimes,表示當前數字的出現次數,其中,ntimes初始化為1。當我們遍歷到陣列中下乙個數字的時候 舉個...