Core Java

Java Array Majority Element

In Java, determining the majority element of an array involves identifying the element that appears more than half of the array’s size. Let us delve into understanding how to use Java array to find the majority element efficiently.

1. Using a Sorting Approach to Find the Majority Element of an Array in Java

In Java, you can find the majority element of an array efficiently using a sorting approach. Let’s break down the code step by step:

package com.jcg.example;

import java.util.Arrays;

public class MajorityElementFinder {
    public static int findMajorityElement(int[] nums) {
        Arrays.sort(nums);
        int candidate = nums[nums.length / 2];
        int count = 0;
        for (int num : nums) {
            if (num == candidate) {
                count++;
            }
        }
        if (count > nums.length / 2) {
            return candidate; // Majority element found
        } else {
            return -1; // No majority element
        }
    }

    public static void main(String[] args) {
        int[] nums = {3, 3, 4, 2, 4, 4, 2, 4, 4};
        // int[] nums = {3, 3, 4, 4, 5, 5, 2, 2, 1};
        int majorityElement = findMajorityElement(nums);
        if (majorityElement != -1) {
            System.out.println("Majority Element: " + majorityElement);
        } else {
            System.out.println("No Majority Element found.");
        }
    }
}

1.1 Code Explanation and Output

The code defines a Java class MajorityElementFinder with two methods: findMajorityElement() and main().

  • findMajorityElement() method takes an array nums as input, sorts the array, and returns the element at index nums.length / 2, which is the majority element.
  • main() method demonstrates the usage of findMajorityElement() by creating an array nums and printing the majority element found. If no majority element is found in the given array, the else message will be printed on the IDE console.

The code above will output:

Majority Element: 4

2. Using HashMap Approach to Find the Majority Element of an Array in Java

In Java, you can find the majority element of an array efficiently using a HashMap approach. Let’s break down the code step by step:

package com.jcg.example;

import java.util.HashMap;

public class MajorityElementFinder {
    public static int findMajorityElement(int[] nums) {
        HashMap<Integer, Integer> map = new HashMap<>();

        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        int maxCount = 0;
        int majorityElement = -1; // Default value indicating no majority element

        for (int num : map.keySet()) {
            int count = map.get(num);
            if (count > nums.length / 2) {
                maxCount = count;
                majorityElement = num; // Update majority element
            }
        }

        return majorityElement;
    }

    public static void main(String[] args) {
        int[] nums = {3, 3, 4, 2, 4, 4, 2, 4, 4};
        // int[] nums = {3, 3, 4, 4, 5, 5, 2, 2, 1};
        int majorityElement = findMajorityElement(nums);
        if (majorityElement != -1) {
            System.out.println("Majority Element: " + majorityElement);
        } else {
            System.out.println("No Majority Element found.");
        }
    }
}

2.1 Code Explanation and Output

The code defines a Java class MajorityElementFinder with two methods: findMajorityElement() and main().

  • findMajorityElement() method takes an array nums as input, creates a HashMap to store the frequency of each element, and iterates through the array to populate the map.
  • After populating the map, it iterates through the map to find the element with the maximum frequency, which is the majority element.
  • main() method demonstrates the usage of findMajorityElement() by creating an array nums and printing the majority element found. If no majority element is found in the given array, the else message will be printed on the IDE console.

The code above will output:

Majority Element: 4

3. Using the Boyer-Moore Voting Algorithm to Find the Majority Element of an Array in Java

In Java, you can find the majority element of an array efficiently using the Boyer-Moore Voting Algorithm. Let’s break down the code step by step:

package com.jcg.example;

public class MajorityElementFinder {
    public static int findMajorityElement(int[] nums) {
        int majorityElement = nums[0];
        int count = 1;

        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == majorityElement) {
                count++;
            } else {
                count--;
            }

            if (count == 0) {
                majorityElement = nums[i];
                count = 1;
            }
        }

        // Verify the majority element
        int frequency = 0;
        for (int num : nums) {
            if (num == majorityElement) {
                frequency++;
            }
        }
        if (frequency > nums.length / 2) {
            return majorityElement;
        } else {
            return -1; // No majority element found
        }
    }

    public static void main(String[] args) {
        int[] nums = {3, 3, 4, 2, 4, 4, 2, 4, 4};
        // int[] nums = {3, 3, 4, 4, 5, 5, 2, 2, 1};
        int majorityElement = findMajorityElement(nums);
        if (majorityElement != -1) {
            System.out.println("Majority Element: " + majorityElement);
        } else {
            System.out.println("No Majority Element Found.");
        }
    }
}

3.1 Code Explanation and Output

The code defines a Java class MajorityElementFinder with two methods: findMajorityElement() and main().

  • findMajorityElement() method takes an array nums as input and iterates through it using the Boyer-Moore Voting Algorithm to find the majority element.
  • After finding a potential majority element, it verifies whether it is indeed the majority element by counting its frequency in the array.
  • main() method demonstrates the usage of findMajorityElement() by creating an array nums and printing the majority element found. If no majority element is found in the given array, the else message will be printed on the IDE console.

The code above will output:

Majority Element: 4

4. Comparison

The table below provides a comparison of different techniques used to find the majority element of an array in Java.

TechniquePerformanceAdvantagesDisadvantages
Using a Sorting ApproachLinearithmic time complexity O(n log n)Easy identification of majority element after sortingModifies original array order, not suitable for preserving order
Using HashMapLinear time complexity O(n)Efficient tracking of element frequenciesRequires additional space for storing frequencies
Using the Boyer-Moore Voting AlgorithmLinear time complexity O(n)Space-efficient, requires constant extra spaceRequires additional verification step

5. Conclusion

When it comes to finding the majority element of an array in Java, there are several approaches available. One common method involves using a for loop to iterate through the array and track the frequency of each element, identifying the one that appears more than half of the array’s size. Another approach utilizes sorting, where the array is sorted first, allowing the majority element to be easily identified as the middle element. Alternatively, employing a HashMap allows for efficient tracking of element frequencies, enabling quick determination of the majority element. Additionally, the Boyer-Moore Voting Algorithm offers a space-efficient solution by iteratively selecting a potential majority element and verifying its validity. Each of these methods offers its advantages and trade-offs, providing flexibility in choosing the most suitable approach based on the specific requirements and constraints of the problem at hand.

Yatin Batra

An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments
Back to top button