สมมติว่าเราได้ให้อาร์เรย์ของจำนวนเต็ม ภารกิจคือการค้นหาดัชนีขององค์ประกอบเฉพาะในอาร์เรย์ที่กำหนด ตัวอย่างเช่น
อินพุต-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) เราสามารถใช้แนวทางของแฮชแมปได้
ในแนวทางนี้ เราจะสร้าง unordered map (STL Library) ซึ่งประกอบด้วยคู่คีย์-ค่า ซึ่งคีย์จะเป็นองค์ประกอบ และ Value จะเป็นองค์ประกอบที่เกิดขึ้น ขณะสำรวจผ่านแผนที่ เราจะพบจำนวนการเกิดขึ้นสูงสุดและส่งคืนตัวเลขเป็นผลลัพธ์
-
รับอินพุตอาร์เรย์ขนาด N
-
ฟังก์ชัน Integer maxOccurrence(int A[], int size) รับอาร์เรย์และขนาดเป็นอินพุตและส่งกลับตัวเลขที่มีความถี่สูงสุด
-
การสร้าง hashmap ขององค์ประกอบทั้งหมดของอาร์เรย์โดยใช้คีย์เป็นองค์ประกอบและค่าเป็นความถี่
-
วนซ้ำบนแผนที่และตรวจสอบว่าองค์ประกอบใดที่มีความถี่มากที่สุดแล้วส่งคืนผลลัพธ์เป็นตัวเลข มิฉะนั้น ถ้าไม่มีตัวเลขอยู่ในอาร์เรย์ ให้คืนค่า '-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