给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
代码最简单的,直接排序找出最中间数,即为数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return (nums[nums.length/2]);
}
}
双循环嵌套
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
int zhongshu=0;
for(int i=0;i<nums.length;){
int count=1;
for(int j=i+1;j<nums.length;j++){
if(nums[i]==nums[j]){
count++;
}else{
break;
}
}
if(count>nums.length/2){
zhongshu=nums[i];
break;
}
i +=count;
}
return zhongshu;
}
分治
package Leetcode;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class 求众数 {
public static int findcount(int[] nums, int begin, int end){
if (begin == end)
return nums[begin];
else {
int mid = (begin+end)/2;
int left = findcount(nums,begin,mid);
int right = findcount(nums,mid+1,end);
if(left == right) {
return left;
}else{
int countl = 0;
int countr = 0;
for (int i = begin; i <= end; i++)
if (nums[i] == left) {
countl++;
} else if (nums[i] == right) {
countr++;
}
if (countl > countr) {
return left;
} else {
return right;
}
}
}
}
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String []str=br.readLine().split(" ");
int []nums=new int[str.length];
for(int i=0;i<str.length;i++){
nums[i]=Integer.parseInt(str[i]);
}
System.out.println(findcount(nums,0,nums.length-1));
}
}