博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Majority Element II
阅读量:6520 次
发布时间:2019-06-24

本文共 1601 字,大约阅读时间需要 5 分钟。

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.

Hint:

  1. How many majority elements could it possibly have?

跟出现超过一半的数差不多,出现超过1/3的数最多有2个,扫描一遍数组,分别计数数组中的元素,当出现3个不同的元素时,把这3个元素都抛弃掉,如果有符合要求的数,那么它一定在最后剩下的数中,再分别判断一下剩下的数就能得到答案。

1 class Solution { 2 public: 3     vector
majorityElement(vector
& nums) { 4 int k = 3; 5 vector
val(k), cnt(k, 0); 6 for (int i = 0; i < nums.size(); ++i) { 7 bool flag = true; 8 for (int j = 0; j < k; ++j) { 9 if (val[j] == nums[i] && cnt[j] > 0) {10 val[j] = nums[i];11 ++cnt[j];12 flag = false;13 break;14 }15 }16 if (flag) {17 for (int j = 0; j < k; ++j) {18 if (cnt[j] == 0) {19 val[j] = nums[i];20 ++cnt[j];21 break;22 }23 }24 }25 if (cnt[k - 1] == 1) {26 for (int kk = 0; kk < k; ++kk) {27 --cnt[kk];28 }29 }30 }31 vector
res;32 for (int i = 0; i < k; ++i) if (cnt[i] > 0) {33 int c = 0;34 for (auto n : nums) if (val[i] == n) ++c;35 if (c > nums.size() / k) res.push_back(val[i]);36 }37 return res;38 }39 };

 

转载地址:http://leubo.baihongyu.com/

你可能感兴趣的文章
window.location.href无法跳转
查看>>
django html模板继承 {%block 标记名} {%endblock%}
查看>>
Linux htop 使用
查看>>
PostgreSQL精简命令:
查看>>
1.4 Eclipse 自动补全功能
查看>>
从外部数据库驱动程序 (9499) 的意外的错误。
查看>>
Node.js:Buffer浅谈
查看>>
php数组转为JSON字符串(兼容中文)
查看>>
使用 RGraph(HTML5) 绘制折线图(三)
查看>>
window下安裝redis服務
查看>>
Oracle——PL/SQL(1)
查看>>
Ubuntu之Git更新
查看>>
参观微软Serbia开发中心和Office365 2019-01-31活动感悟
查看>>
第二题:创建记事本并写入内容
查看>>
Session的生命同期
查看>>
登录名称
查看>>
线性表
查看>>
Win8 Metro App里玩XNA:框架问题解决方案
查看>>
Html5 Egret游戏开发 成语大挑战(六)游戏界面构建和设计
查看>>
【NOIP2016】天天爱跑步
查看>>