给出大小为n的数组,找到多数元素。多数元素是出现超过⌊n / 2次的元素。
您可以假定数组为非空并且多数元素始终存在于数组中。
我尝试了以下代码,其中一些测试用例无法正常工作。
class Solution {
public int majorityElement(int[] nums) {
int x = (nums.length)/2;
int temp=0;
for (int i=0;i<nums.length-1; i++){
if (nums[i]>nums[i+1]){
temp=nums[i+1];
nums[i+1]=nums[i];
nums[i]=temp;
}
}
if (nums.length==1){
return nums[0];
}
if (nums.length%2==0){
return nums[x];
}
else {
return nums[(nums.length/2)+1];
}
}
}
当输入为[3,3,4]时,我的代码输出4而不是3。
答案 0 :(得分:2)
由于Array
是基于零的,因此您需要执行以下操作:
return nums[(nums.length/2)];
代替:
return nums[(nums.length/2)+1];
因此,如果Array
由3个元素组成,它将返回中间元素而不是最后一个元素。
您的算法也不正确。对于Array
[1,1,2,0],它将返回0
。问题在于,由于您的排序仅是一个循环,因此不能保证将对整个Array
进行排序。相反,您可以使用Arrays.sort
:
public static int foo(int[] nums) {
int x = (nums.length)/2;
Arrays.sort(nums);
if (nums.length==1){
return nums[0];
}
if (nums.length%2==0){
return nums[x];
}
else {
return nums[(nums.length/2)];
}
}
由于有一项规定,多数元素是出现超过⌊n / 2次的元素。可以简化为:
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2]
}
答案 1 :(得分:0)
您可以检查数组中每个值的频率,如果其值大于n / 2,则按如下所示返回它。我认为这里的逻辑会更清楚
public int majorityElement(int[] nums) {
List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
HashSet<Integer> set = new HashSet<>(list);
for (int value: set) {
if (Collections.frequency(list, value) > list.size() / 2) {
return value;
}
}
return -1;
}
答案 2 :(得分:0)
import java.util.Arrays;
public class spl {
public int majorityElement(int[] nums) {
int x = (nums.length)/2;
int counter=1;
int majEl = -1; /// for no majority element is -1;
boolean flag=false;
bubbleSort(nums);
for(int i=0;i<(nums.length+1)/2;i++) {
if(flag) {break;}
if(nums[i]==nums[i+1])
while(nums[i]==nums[i+1]) {
++counter;
i++;}
if(counter>=x) {
majEl=nums[i];
flag=true;
break;
}
else {counter=1;}
}
if (nums.length==1){
return nums[0];
}
else {return majEl;}
}
private void bubbleSort(int[] arr) {
int n = arr.length;
int temp = 0;
for(int i=0; i < n; i++){
for(int j=1; j < (n-i); j++){
if(arr[j-1] > arr[j]){
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
}
}
说明:nums [8,7,3,3,3],在BubbleSort [3,3,3,7,8]之后,在循环中检查nums [0] == nums [1],++ counter,nums [1] == nums [2],++ counter ;,所以counter是3,比那个array.size大,所以您找到了多数元素