169 多數元素(雜湊表解決)

2021-10-23 10:35:26 字數 1311 閱讀 3980

雜湊查詢真難分析複雜度,不方便定演算法優劣,但是總體來看是線性的,相比之下,由於排序演算法nlogn的下限限制,我還是決定用hash的常規演算法來解決這個問題。

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。

你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。

示例 1:

輸入: [3,2,3]

輸出: 3

示例 2:

輸入: [2,2,1,1,1,2,2]

輸出: 2

一開始是想通過全部排序在遍歷一遍來解決這個問題,但是後來覺得nlong+n可能會被卡時間,後來想了想,無序陣列的查詢還是用hash表解決。

雜湊表資料結構:(畫圖著實醜了一點點,湊合著看吧)(尷尬)

2.通過除留餘數法構建hash表,通過鍊錶來解決衝突。o(n)

3.依次遍歷鍊錶,找到目標數字。o(n)

總體來看,基本上就是o(2n+f(numssize)),因為f(numssize)#include

#include

#include

typedef

struct node hashelement;

intfoundprime

(int numssize)

;int

majorityelement

(int

* nums,

int numssize)

;int

main()

;//這裡先假定是這個情況,當然也可以隨意更改

printf

(" %d "

,majorityelement

(nums,6)

);return0;

}int

foundprime

(int numssize)

return

sqrt

(numssize);}

intmajorityelement

(int

* nums,

int numssize)

else

}for

(int i =

0; i < number; i++

) p = p->next;}}

return max;

}

169 多數元素

解題思路 1.將陣列從小到大排序 2.第nums.length 2處的元素就是我們要求的元素,直接返回nums nums.length 2 即可 實現 class solution 解題思路 1.變數val,初始值為nums 0 記錄當前的值,計數器cnt,記錄當前元素累計出現的情況,初始值為1 2...

169 多數元素

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 分析 解法一 我們可以先排序,然後輸出在陣列 現次數大於...

169 多數元素

題目描述 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 方法1 直接使用unordered map進行...