日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Majority Element

發(fā)布時(shí)間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Majority Element 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Given an array of size?n, find the majority element. The majority element is the element that appears more than?? n/2 ??times.

You may assume that the array is non-empty and the majority element always exist in the array.

給定size 為n的數(shù)組,查找出主元素,就是出現(xiàn)次數(shù)大于n/2次的元素。你可以假定數(shù)組非空,而且主元素一定存在。

class Solution { public:int majorityElement(vector<int>& nums) {map<int, int> im;for (int i = 0; i < nums.size(); ++i){map<int, int>::iterator it = im.find(nums[i]);if (it == im.end()) {im[nums[i]] = 1;} else {im[nums[i]]++;}if (im[nums[i]] > nums.size()/2) {return nums[i];}}return 0;} };

有一種算法叫 Moore’s Voting Algorithm,由Robert S.Boyer 和J Strother Moore于1980年發(fā)明,是線性時(shí)間復(fù)雜度。

int majorityElement(vector<int> &num) {int majority;int cnt = 0;for(int i=0; i<num.size(); i++){if ( cnt ==0 ){majority = num[i];cnt++;}else{majority == num[i] ? cnt++ : cnt --;if (cnt >= num.size()/2+1) return majority;}}return majority; }

當(dāng)然,這種算法對(duì)于存在主元素的數(shù)組是有效的,如:

A A A C C B B C C C B C C

它肯定能返回主元素C。但是,如果不存在主元素,那么得到的結(jié)果就跟遍歷順序有關(guān)了。如:

A A A C C C B

如果是從左到右,那么結(jié)果是B,如果是從右到左,那么結(jié)果是A。

class Solution { public:int majorityElement(vector<int>& nums) {int n = nums.size(); sort(nums.begin(),nums.end()); return nums[n/2]; } };
#include<iostream> #include<vector> #include<algorithm> #include<map> using namespace std; int major(vector<int>); int main() {vector<int>a = { 1, 2, 3, 4, 2, 2, 5, 2, 2, 2, 2, 2, 2 };cout << major(a) << endl;system("pause");return 0;} int major(vector<int> a) {/*sort(a.begin(), a.end());return a[a.size() / 2];*//*map<int, int> m;for (int i = 0; i < a.size(); i++){if (m.find(a[i]) == m.end()){m[a[i]] = 1;}else{m[a[i]]++;}if (m[a[i]]>a.size() / 2)return a[i];}*///標(biāo)志位想減法 可以判斷出現(xiàn)次數(shù)做多數(shù)int major;int num = 0;for (int i = 0; i < a.size(); i++){if (num == 0){major = a[i];num++;}else{if (major != a[i])num--;else{num++;}}if (num > a.size() / 2) return major;}}


總結(jié)

以上是生活随笔為你收集整理的Majority Element的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。