演算法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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- leecode 169. 多數元素
- 【LeetCode】169. 多數元素LeetCode
- 2024.9.4 leetcode169 多數元素 (C++)LeetCodeC++
- 2024.9.4 leetcode 169 多數元素 (雜湊表)LeetCode
- LeetCode 169. Majority ElementLeetCode
- 主元素演算法演算法
- Java中查詢陣列多數元素的4種方法Java陣列
- 順序表應用1:多餘元素刪除之移位演算法演算法
- 順序表應用2:多餘元素刪除之建表演算法演算法
- 演算法:利用分治演算法求解N個元素中的第M大元素演算法
- 環形連結串列_相交連結串列_多數元素(java語言)Java
- 1116新增元素的多種操作技巧
- 使用simplemind如何選擇多個元素
- 演算法--力扣27. 移除元素演算法力扣
- 陣列元素的數量陣列
- 調整陣列元素順序演算法陣列演算法
- java 兩個列表的元素是否相等且各自元素數量相等Java
- 統計陣列元素中每個元素出現的次數陣列
- Python列表數字元素加權和Python字元
- JavaScript 陣列的指定位置插入多個元素JavaScript陣列
- Chrome下多屏、長頁面或者元素截圖Chrome
- 讓我們一起啃演算法----移除元素演算法
- 【LeetCode-陣列】查詢大多數元素LeetCode陣列
- dpp多樣性演算法演算法
- 多源最短路徑演算法:Floyd演算法演算法
- JavaScript 拼接多個陣列並刪除重複元素JavaScript陣列
- 同一個元素中有多個class,優先順序
- 508、出現次數最多的子樹元素和 | 演算法(leetcode,附思維導圖 + 全部解法)300題演算法LeetCode
- 統計陣列中各數字(元素)出現的次數陣列
- CSS 倒數第n個li元素樣式CSS
- JavaScript 獲取倒數第二個li元素JavaScript
- 返回陣列中的最大元素個數陣列
- matlab——統計相同元素出現的次數Matlab
- 【簡單演算法】1.兩數之和,給定整數陣列和目標值,找出陣列中2數之和等於目標值的元素演算法陣列
- YOLOP 多工演算法詳解YOLO演算法
- 二分搜尋演算法求元素位置(c語言)演算法C語言
- list中for迴圈刪除多個元素為何報錯?
- Matlab 統計陣列中各數字(元素)出現的次數Matlab陣列