找array中数量大于n/2的数。
先将array排序,从第一个开始数每个数的出现次数,找到大于n/2的直接返回。
public class Solution {
public int majorityElement(int[] num) {
Arrays.sort(num);
int length = num.length;
int maj = num[0];
int numOf = 1;
for ( int i = 1; i < length; i ++ ){
if ( maj == num [i]){
numOf ++;
if ( numOf > length/2)
break;
}
else {
numOf = 1;
maj = num [i];
}
}
return maj;
}
}
10/23/2015
简直不知道当时怎么想的
假如sort的话 就不需要这样一步一步算了 直接返回中间的值 因为maj 一定会在中间 nlgn
o(n)的方法是 把maj设置为第一个数字 然后就遍历 假如不等于maj 就-- 等于就++ 每次记得先判断count 是否为0 为0就需要新的maj、
这样留到最后的就是maj
public class Solution {
public int majorityElement(int[] nums) {
int res = nums [ 0 ];
int count = 1;
for ( int i = 1; i < nums.length; i ++ ){
if ( count == 0 )
res = nums [ i ];
if ( nums[ i ] == res )
count ++;
else
count --;
}
return res;
}
}