演算法169. 多數元素
1. 題目描述
給定一個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列中出現次數大於 ⌊ n/2 ⌋ 的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。
示例 1:
輸入: [3,2,3]
輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2]
輸出: 2
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/majority-element
2. 解題思路
/*
解題思路:
解法一、排序法
1、將陣列排序,返回下標為nums + numsSize / 2的數
解法二、消除法
1、假設目標數為key = nums[0]
2、遇到相同數則count_add++,否則count_add++,count_sub--
3、count_add+count_sub表示累計相同值次數,如果大於numsSize / 2,返回key
4、當count_add<1時,改為key=nums[++i]
5、遍歷結束後,key為目標眾數
*/
3. 測試結果
解法一、排序法
解法二、消除法
4. 排序法
int compare(const void* a, const void* b)
{
return (*(int*)a - *(int*)b);
}
int majorityElement(int* nums, int numsSize) {
//使用qsort函式快速排序
qsort(nums, numsSize, sizeof(int), compare);
return *(nums + numsSize / 2);
}
5. 消除法
int majorityElement(int* nums, int numsSize) {
if (numsSize <= 2)
return *nums;
int key = nums[0];
int count_add = 1;
int count_sub = 0;
for (int i = 1; i < numsSize; i++)
{
if (nums[i] == key)
count_add++;
else {
count_add--;
count_sub++;
}
if (2 * (count_add + count_sub) >= numsSize)
return key;
if (count_add < 1) {
key = nums[++i];
count_add = 1;
count_sub = 0;
}
}
return key;
}
6. 複雜度分析
解法一、排序法
時間複雜度:O(nlogn)
空間複雜度:O(1)
解法二、消除法
時間複雜度:O(n)
空間複雜度:O(1)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31442014/viewspace-2693616/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【LeetCode】169. 多數元素LeetCode
- LeetCode 169. Majority ElementLeetCode
- 主元素演算法演算法
- Java中查詢陣列多數元素的4種方法Java陣列
- 169. Majority Element--LeetCode RecordLeetCode
- 順序表應用1:多餘元素刪除之移位演算法演算法
- 順序表應用2:多餘元素刪除之建表演算法演算法
- 環形連結串列_相交連結串列_多數元素(java語言)Java
- 演算法:利用分治演算法求解N個元素中的第M大元素演算法
- 獲取div元素下li元素的數目
- 求多個數最大公約數、最小公倍數的一種變換演算法演算法
- 使用simplemind如何選擇多個元素
- css多列li元素水平居中效果CSS
- php多維陣列去除空元素PHP陣列
- jQuery中多個元素的Hover事件jQuery事件
- css數第二個li元素CSS
- jQuery實現的多列元素高度相等jQuery
- jQuery根據多個屬性匹配元素jQuery
- 調整陣列元素順序演算法陣列演算法
- 演算法找陣列中的特定元素演算法陣列
- 統計陣列元素中每個元素出現的次數陣列
- jquery實現的獲取指定元素指定型別元素數目jQuery型別
- java 兩個列表的元素是否相等且各自元素數量相等Java
- CSS 倒數第二個li元素CSS
- 求素數(質數)演算法演算法
- 不會改變操作物件內容的STL演算法(元素查詢,序列查詢,統計元素個數,比較區間,找最值)物件演算法
- JavaScript 陣列的指定位置插入多個元素JavaScript陣列
- Chrome下多屏、長頁面或者元素截圖Chrome
- 1116新增元素的多種操作技巧
- css3實現多個元素依次顯示CSSS3
- 多源最短路徑演算法:Floyd演算法演算法
- Python列表數字元素加權和Python字元
- css如何匹配倒數第n個元素CSS
- 讓我們一起啃演算法----移除元素演算法
- 演算法學習之路|連結串列元素分類演算法
- 演算法提高 11-2刪除重複元素演算法
- 演算法單連結串列交換任意兩個元素演算法
- jquery css()一次性為多個元素設定多個樣式jQueryCSS