• Majority Number II


    Source

    Given an array of integers,
    the majority number is the number that occurs more than 1/3 of the size of the array.
    
    Find it.
    
    Example
    Given [1, 2, 1, 2, 1, 3, 3], return 1.
    
    Note
    There is only one majority number in the array.
    
    Challenge
    O(n) time and O(1) extra space.

    题解

    题 Majority Number 的升级版,之前那道题是『两两抵消』,这道题自然则需要『三三抵消』,不过『三三抵消』需要注意不少细节,比如两个不同数的添加顺序和添加条件。

    Java

    public class Solution {
        /**
         * @param nums: A list of integers
         * @return: The majority number that occurs more than 1/3
         */
        public int majorityNumber(ArrayList<Integer> nums) {
            if (nums == null || nums.isEmpty()) return -1;
    
            // pair
            int key1 = -1, key2 = -1;
            int count1 = 0, count2 = 0;
            for (int num : nums) {
                if (count1 == 0) {
                    key1 = num;
                    count1 = 1;
                    continue;
                } else if (count2 == 0 && key1 != num) {
                    key2 = num;
                    count2 = 1;
                    continue;
                }
                if (key1 == num) {
                    count1++;
                } else if (key2 == num) {
                    count2++;
                } else {
                    count1--;
                    count2--;
                }
            }
    
            count1 = 0;
            count2 = 0;
            for (int num : nums) {
                if (key1 == num) {
                    count1++;
                } else if (key2 == num) {
                    count2++;
                }
            }
            return count1 > count2 ? key1 : key2;
        }
    }

    源码分析

    首先处理count == 0的情况,这里需要注意的是count2 == 0 && key1 = num, 不重不漏。最后再次遍历原数组也必不可少,因为由于添加顺序的区别,count1 和 count2的大小只具有相对意义,还需要最后再次比较其真实计数器值。

    复杂度分析

    时间复杂度 O(n), 空间复杂度 O(2×2)= O(1)O(2×2)=O(1).

  • 相关阅读:
    RTC是DS1339,驱动采用的是rtc-ds1307.c
    hi3515 rtc驱动(ds1307/1339)驱动和示例
    qt5.4.1的imx6编译
    Python实现ID3(信息增益)
    Python实现nb(朴素贝叶斯)
    Python实现kNN(k邻近算法)
    Android实现地图服务
    Android实现传感器应用及位置服务
    Android实现KSOAP2访问WebService
    Android实现网络访问
  • 原文地址:https://www.cnblogs.com/lyc94620/p/15025997.html
Copyright © 2020-2023  润新知