leetcode 229. Majority Element II

匿名 (未验证) 提交于 2019-12-03 00:18:01

leetcode 229. Majority Element II

题意:给你一个数组,让你找出里面出现次数大于[n/3]次的数,n是数组总数。

要求:时间复杂度O(n),空间复杂度O(1)

思路:题目感觉很熟悉,剑指offer里面有一道题目是找一个数组里面出现超过一般的数,往那方面想。

首先,出现超过[n/3]的数最多只有两个。

我们用a1,a2表示这两个数,num1,num2表示这个数出现的次数。

遍历整个数组,和a1,a2相同的话,num1,num2加1,不同的话减1;

a1,a2没有值得话赋值。

但是a1,a2出现的次数不一定超过[n/3],但是次数肯定是最多的两个。

最后再看看次数就好了。

class Solution { public:     vector<int> majorityElement(vector<int>& nums) {                  vector<int> ans;                  if(nums.size() == 0) return ans;                  int cout1=0,cout2=0,num1 = -1,num2 = -1;         for(int i=0;i<nums.size();i++)         {              if( nums[i] == num1)             {                  cout1++;             }             else if( nums[i] == num2)             {                 cout2++;             }             else if(cout1 == 0 )             {                 cout1++;                 num1 = nums[i];             }             else if(cout2 == 0 )             {                 cout2++;                 num2 = nums[i];             }                         else             {                 cout1--;                 cout2--;             }         }         cout1 = cout2 = 0;         for(auto n:nums)                 if(n == num1)                     cout1++;                 else if(n == num2)                     cout2++;         if(cout1 > nums.size() / 3) ans.push_back(num1);         if(cout2 > nums.size() / 3) ans.push_back(num2);          return ans;     } };

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!