• LeetCode 229. 求众数 II(Majority Element II )


    题目描述

    给定一个大小为 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

    说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。

    示例 1:

    输入: [3,2,3]
    输出: [3]

    示例 2:

    输入: [1,1,1,3,3,2,2,2]
    输出: [1,2]

    解题思路

    由于数组中出现次数超过 $frac{1}{3}$ 的数字最多只可能为两个,所以记录两个数字n1、n2,以及他们出现的次数c1、c2,遍历数组并做以下操作:

    • 若当前两数字出现则把对应的次数加1;
    • 若其中一个出现次数为0,则把当前数字赋给出现次数为0的数字,并将其出现次数置为1;
    • 若当前数字不同于任何一个数字,则将两数字的出现次数都减1

    最后得到两个数字以及他们出现的次数,再遍历一遍数组记录他们的出现次数,若大于 $frac{n}{3}$ 则加入到结果中。

    代码

     1 class Solution {
     2 public:
     3     vector<int> majorityElement(vector<int>& nums) {
     4         vector<int> res;
     5         if(nums.empty()) return res;
     6         int n1 = nums[0], n2 = 0, c1 = 1, c2 = 0;
     7         for(int i = 1; i < nums.size(); i++){
     8             if(nums[i] == n1) c1++;
     9             else if(nums[i] == n2) c2++;
    10             else if(c1 == 0){
    11                 n1 = nums[i];
    12                 c1++;
    13             }
    14             else if(c2 == 0){
    15                 n2 = nums[i];
    16                 c2++;
    17             }
    18             else{
    19                 c1--;
    20                 c2--;
    21             }
    22         }
    23         c1 = c2 = 0;
    24         for(int i = 0; i < nums.size(); i++){
    25             if(nums[i] == n1) c1++;
    26             else if(nums[i] == n2) c2++;
    27         }
    28         if(c1 > nums.size() / 3) res.push_back(n1);
    29         if(c2 > nums.size() / 3) res.push_back(n2);
    30         return res;
    31     }
    32 };
  • 相关阅读:
    基础命令
    RHEL7装机
    模拟项目
    配置NAT,PAT
    配置标准ACL,扩展ACL,命名ACL
    HSRP,STP配置
    三层交换配置及RIP动态路由
    vlan,trunk,DHCP,以太网通道
    ERRORS: MRBC.UserInfo.groups: (fields.E304) Reverse accessor for 'UserInfo.groups' clashes with reverse accessor for 'User.groups'. HINT: Add or change a related_name argument to the definition for '
    权限rbac(基于角色的访问控制)
  • 原文地址:https://www.cnblogs.com/wmx24/p/9687097.html
Copyright © 2020-2023  润新知