zoukankan      html  css  js  c++  java
  • 腾讯//求众数

    给定一个大小为 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

    你可以假设数组是非空的,并且给定的数组总是存在众数。

    示例 1:

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

    示例 2:

    输入: [2,2,1,1,1,2,2]
    输出: 2
    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            if(nums.size()==1)
                return nums[0];
            map<int,int> tables;
            for(int i = 0; i < nums.size(); i++){
                if(tables.count(nums[i])){
                    tables[nums[i]]++;
                    if(tables[nums[i]]>nums.size()/2)
                              return nums[i];
                }else{
                    tables[nums[i]] = 1;
                }
            }
        }
    };
    class Solution {
        // 众数求解算法
        public int majorityElement(int[] nums) {
            // 黑板(用于记录数据用)
            LinkedHashMap<Integer, Integer> blackboard = new LinkedHashMap<>();
            // 左边记录到的位置
            int leftPs = 0;
            // 右边记录到的位置
            int rightPs = nums.length - 1;
            // 众数
            Integer mode = null;
    
            tag: while (leftPs <= rightPs) {
                for (int i = leftPs; i <= rightPs; i++) {
                    if (blackboard.get(nums[i]) == null) {
                        blackboard.put(nums[i], 1);
                        leftPs = i + 1;
                        if (leftPs > rightPs) {
                            mode = nums[i];
                        }
                        break;
                    } else {
                        int count = blackboard.get(nums[i]);
                        count++;
                        if (count>nums.length/2) {
                            mode = nums[i];
                            break tag;
                        }
                        blackboard.put(nums[i], count);
                    }
                }
                for (int i = rightPs; i >= leftPs; i--) {
                    if (blackboard.get(nums[i]) == null) {
                        blackboard.put(nums[i], 1);
                        rightPs = i - 1;
                        if (rightPs < leftPs) {
                            mode = nums[i];
                        }
                        break;
                    } else {
                        int count = blackboard.get(nums[i]);
                        count++;
                        if (count>nums.length/2) {
                            mode = nums[i];
                            break tag;
                        }
                        blackboard.put(nums[i], count);
                    }
                }
            }
            return mode;
        }
    }
  • 相关阅读:
    在Centos 7下编译openwrt+njit-client
    开博随笔
    Chapter 6. Statements
    Chapter 4. Arrays and Pointers
    Chapter 3. Library Types
    Chapter 2.  Variables and Basic Types
    关于stm32不常用的中断,如何添加, 比如timer10 timer11等
    keil 报错 expected an identifier
    案例分析 串口的地不要接到电源上 会烧掉
    案例分析 CAN OPEN 调试记录 进度
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602482.html
Copyright © 2011-2022 走看看