Cho mảng arr, phần tử chiếm đa số trong mảng là phần tử xuất hiện lớn hơn hoặc bằng n/2, với n là số phần tử của mảng.
Cho ví dụ:
Input: arr = {1, 2, 4, 4, 3, 4, 5, 4} Output: 4 |
Input: arr = {1, 2, 4, 3, 4, 5, 6, 2} Output: Khong ton tai |
Cách 1: Simple
Sử dụng 2 vòng để kiểm tra số lần xuất hiện trong mảng của mỗi phần tử.
public class Main { public static int marjoritySimple(int[] arr, int n) { for (int i = 0; i < n; i++) { int count = 0; for (int j = 0; j < n; j++) { if (arr[i] == arr[j]) count++; } if (count >= n/2) { return i; } } return -1; } public static void main(String[] args) { int[] arr = {1, 2, 4, 4, 3, 4, 5, 4}; int pos = marjoritySimple(arr, arr.length); System.out.println(pos == -1 ? "Khong ton tai": arr[pos]); } }
Output: 4
Độ phức tạp: O(n2)
Cách 3: Sử dụng HashMap
Nhờ sử dụng cấu trúc dữ liệu bài toán ta sẽ đơn giản và ít code hơn.
public static void marjorityHashMap(int[] arr, int n) { Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < arr.length; i++) { if (map.containsKey(arr[i])) { int count = map.get(arr[i]) +1; if (count >= arr.length /2) { System.out.println(arr[i]); return; } else map.put(arr[i], count); } else map.put(arr[i],1); } System.out.println("Khong ton tai"); }
Output: 4
Độ phức tạp: O(n)
Link source code: source
Nguồn tham khảo: geeksforgeeks