zoukankan      html  css  js  c++  java
  • Java for LeetCode 229 Majority Element II

    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.

    解题思路:

    《编程之美》寻找发帖水王的原题,两次遍历,一次遍历查找可能出现次数超过nums.length/3的数字,(出现三次不同的数即抛弃),第二次验证即可。

    JAVA实现如下:

    public List<Integer> majorityElement(int[] nums) {
            		List<Integer> list = new ArrayList<Integer>();
    		if (nums == null || nums.length == 0)
    			return list;
    		int left = nums[0], right=nums[0];
    		int count1 = 1, count2 = 0;
    		for (int i = 1; i < nums.length; i++) {
    			if (nums[i] == left)
    				count1++;
    			else if(right==left){
    				right=nums[i];
    				count2=1;
    			}
    			else if(right==nums[i])
    				count2++;
    			else if(count1==0){
    				left=nums[i];
    				count1=1;
    			}
    			else if(count2==0){
    				right=nums[i];
    				count2=1;
    			}
    			else{
    				count2--;
    				count1--;
    			}
    		}
    		count1=0;count2=0;
    		for(int i=0;i<nums.length;i++){
    			if(nums[i]==left)
    				count1++;
    			else if(nums[i]==right)
    				count2++;
    		}
    		if(count1>nums.length/3)
    			list.add(left);
    		if(count2>nums.length/3)
    			list.add(right);
    		return list;
        }
    
  • 相关阅读:
    字母次数
    hdu 2051 Bitset(十进制到二进制)
    练习1升级
    实验一写能自动生成小学四则运算题目的程序
    TCP/IP bad check sum
    Lua GC 之 Ephemeron
    RHEL6下VNC安装和配置
    qpid安装
    关闭中国电信无线客户端自动更新
    Python GC
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4810733.html
Copyright © 2011-2022 走看看