今天整理了一下解这道题的方法,感觉大神就是大神,永远都那么神,写的代码帅呆了
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];
}
}