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;
        }
    
  • 相关阅读:
    个人总结
    第二次冲刺 10
    第二次冲刺 09
    第二次冲刺 08
    第二次冲刺 07
    团队冲刺第七天
    团队绩效评估
    团队冲刺第六天
    团队冲刺第五天
    团队冲刺第四天
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4810733.html
Copyright © 2011-2022 走看看