Java 中的众数元素


假设我们给定一个整数数组。任务是在给定数组中找到特定元素的索引。例如:

输入-1

N = 8
A[ ] = { 1,2,4,3,3,1,1,5}

输出

1

说明 − 在给定的整数数组中,出现次数最多的数字是“1”。因此输出是“1”。

输入-2

N = 6
A[ ] = {1,5,4,4,1,1}

输出

1

说明 − 在给定的整数数组中,出现次数最多的数字是“1”。因此我们可以返回输出“1”。

解决这个问题的方法

给定的数组包含多个整数,我们必须在其中找到出现频率最高的元素。为了在线性时间 O(n) 和线性空间 O(n) 内解决这个问题,我们可以使用哈希映射的方法。

在这种方法中,我们将创建一个无序映射(STL 库),它包含键值对,其中键将是元素,值将是元素的出现次数。在遍历映射时,我们将找到数字的最大出现次数,并将该数字作为输出返回。

  • 输入大小为 N 的数组

  • 一个整数函数 maxOccurrence(int A[], int size) 接受一个数组及其大小作为输入,并返回频率最高的数字。

  • 通过将键作为元素,值作为其频率来创建数组所有元素的哈希映射。

  • 遍历映射并检查是否有任何元素具有最高频率,然后将结果作为数字返回。否则,如果数组中不存在任何数字,则返回“-1”。

示例

import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
class Majority_Element{
   public static int checkMajorityElement(int arr[], int N){
      Map<Integer, Integer> mp = new HashMap<Integer, Integer>();
      for (int i = 0; i < N; i++){
         if (mp.containsKey(arr[i]))
            mp.put(arr[i], mp.get(arr[i]) + 1);
         else
            mp.put(arr[i], 1);
      }
      for (Map.Entry<Integer, Integer> entry : mp.entrySet()){
         if (entry.getValue() > (N / 2))
            return entry.getKey();
      }
      return -1;
   }
   public static void main(String args[]){
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter size of array:");
      int N = 6;
      int arr[] = {2,1,1,2,2,2};
      System.out.println("Enter elements of array:");
      for (int i = 0; i < N; i++)
         arr[i] = sc.nextInt();
      int ans = checkMajorityElement(arr, N);
      if (ans != -1)
         System.out.println("Majority Element is: " + ans);
      else
         System.out.println("No majority element in array");
   }
}

输出

运行以上代码将生成以下输出:

Enter size of array: 6
Enter elements of array: 2 1 1 2 2 2
Majority Element is: 2

更新于:2021年2月5日

920 次查看

启动你的职业生涯

完成课程获得认证

开始
广告