solution_229
来源:互联网 发布:淘宝宝贝权重怎么看 编辑:程序博客网 时间:2024/06/11 15:26
LeetCode Problem 229 Description
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.
Solution
This problem is familiar to the LeetCode problem 169 and I think we can use the Boyer-Moore algorithm to solve it.
Since the problem require for ⌊ n/3 ⌋
times, we can set up two elements to be the major element group to make sure that we can get the element we want because there are at most 2 elements that appear more than⌊ n/3 ⌋
times. And the following code can make sure that the elements that appear the most times must be in the group we get at last.
#include <iostream>#include <string>#include <vector>using namespace std;class Solution { public: vector<int> majorityElement(vector<int> & nums);};vector<int> Solution::majorityElement(vector<int> & nums) { //Boyer-Moore algorithm int major1, major2, count1 = 0, count2 = 0; vector<int> result; for (int i = 0; i < nums.size(); i++){ if (major1 == nums[i]) { count1++; } else if (major2 == nums[i]) { count2++; } else if (count1 == 0) { major1 = nums[i]; count1++; } else if (count2 == 0) { major2 = nums[i]; count2++; } else { count1--; count2--; } } count1 = 0; count2 = 0; for (int i = 0; i < nums.size(); i++) { if (nums[i] == major1) { count1++; } if (nums[i] == major2) { count2++; } } if (count1 > nums.size() / 3) { result.push_back(major1); } if (count2 > nums.size() / 3) { result.push_back(major2); } return result;}
阅读全文
0 0
- solution_229
- StringBuilder的用法
- 学习笔记-推荐系统(Recommender systems)
- Redis 散列(Hash)介绍与基本操作
- 从面试题i = i++; 了解java内存模型
- 打印菱形
- solution_229
- 4.Dijkstra单点最短路径算法 迪杰斯特拉
- 基于VideoView的自定义控制面板的视频播放器
- SpringMVC笔记(一)——请求流程
- 完全数
- 第六节第二大特性继承
- 543. Diameter of Binary Tree (二叉树)
- Vue之class的
- PAT (Advanced) 1018. Public Bike Management (30)