【LeetCode-169】Majority Element

今天整理了一下解这道题的方法,感觉大神就是大神,永远都那么神,写的代码帅呆了

package leetcode;
import java.util.*;

public class MajorityElement {

	/**
	 * 最好的一种方法
	 * 每找出两个不同的element,则成对删除。最终剩下的一定就是所求的。
	 * 可扩展到⌊n/k⌋的情况,每k个不同的element进行成对删除。
	 */
	public int majorityElement(int[] nums) {
	    int result = 0, count = 0;
	 
	    for(int i = 0;i < nums.length;i++ ) {
	        if(count == 0){
	            result = nums[i];
	            count = 1;
	        }else if(result == nums[i]){
	           count ++;
	        }else{
	           count --;
	        }
	    }
	 
	    return result;
	}
	
	//利用map解决问题,这种方法算是比较low的了
	public int majorityElement1(int[] nums) {
		int result = 0;
        Map<Integer,Integer> se = new HashMap<Integer,Integer>();
        for(int i = 0;i < nums.length;i ++)
        {
        	if(!se.containsKey(nums[i]))
        	{
        		se.put(nums[i], 1);
        	}
        	else
        	{
        		se.put(nums[i], se.get(nums[i]) + 1);
        	}
        }
        int max = -1;
        for(@SuppressWarnings("rawtypes") Map.Entry entry : se.entrySet())
        {
        	Integer temp = (Integer)entry.getValue();
        	if(temp > max)
        	{
        		max = temp;
        		result = (Integer)entry.getKey();
        	}
        }
        return result;
    }
	
	//直接排序,然后返回中间那个值
	public int majorityElement2(int[] nums) {
		Arrays.sort(nums);
		
		return nums[nums.length / 2];
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值