雜湊查詢真難分析複雜度,不方便定演算法優劣,但是總體來看是線性的,相比之下,由於排序演算法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進行...