169 Majority Element 求众数 数组中出现次数超过一半的数字

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且数组中的众数永远存在。

详见:https://leetcode.com/problems/majority-element/description/

Java实现:

方法一:

class Solution {
    public int majorityElement(int[] nums) {
        int n=nums.length;
        if(n==0||nums==null){
            return -1;
        }
        int num=nums[0];
        int cnt=1;
        for(int val:nums){
            if(val==num){
                ++cnt;
            }else{
                --cnt;
                if(cnt==0){
                    num=val;
                    cnt=1;
                }
            }
        }
        cnt=0;
        for(int val:nums){
            if(val==num){
                ++cnt;
            }
        }
        if(2*cnt>n){
            return num;
        }
        return -1;
    }
}

方法二:

class Solution {
    public int majorityElement(int[] nums) {
        int n=nums.length;
        if(n==0||nums==null){
            return -1;
        }
        int low=0;
        int high=n-1;
        int mid=n>>1;
        int index=partition(nums,low,high);
        while(index!=mid){
            if(index>mid){
                high=index-1;
                index=partition(nums,low,high);
            }else if(index<mid){
                low=index+1;
                index=partition(nums,low,high);
            }
        }
        int num=nums[mid];
        int cnt=0;
        for(int val:nums){
            if(val==num){
                ++cnt;
            }
        }
        if(2*cnt>n){
            return num;
        }
        return -1;
    }
    private int partition(int[] nums,int low,int high){
        int pivot=nums[low];
        while(low<high){
            while(low<high&&nums[high]>=pivot){
                --high;
            }
            nums[low]=nums[high];
            while(low<high&&nums[low]<=pivot){
                ++low;
            }
            nums[high]=nums[low];
        }
        nums[low]=pivot;
        return low;
    }
}

python实现:

参考:http://www.cnblogs.com/grandyang/p/4233501.html

posted on 2018-04-07 00:11  lina2014  阅读(191)  评论(0编辑  收藏  举报

导航