問題描述:
給定一個整型數組,找出主元素,它在數組中的出現次數嚴格大於數組元素個數的二分之一。
樣例:給出數組[1,1,1,1,2,2,2],返回 1
public int majorityNumber(ArrayList<Integer> nums) {
// write your code
int [] num=new int[200];
int result=0;
for(int i:nums){
num[i]++;
}
for(int j=0;j<num.length;j++){
if(num[j]>nums.size()/2){
result=j;
break;
}
}
return result;
}
方法二:其實,這就是排序的另一種考察方式;我們可以先將nums排序,排序完後的數列中中間的數字肯定是出現次數大於nums長度的二分之一的數;
public int majorityNumber2(ArrayList<Integer> nums){
if(nums==null||nums.size()==0){
return 0;
}
int[] temp=new int[200];
temp[0]=nums.get(0);
int pos=0;
//插入排序
for(int i=1;i<nums.size();i++){
pos=i-1;
while(pos>=0&&nums.get(i)>temp[pos]){
temp[pos+1]=temp[pos];
pos--;
}
temp[pos+1]=nums.get(i);
}
return temp[nums.size()/2];
}