ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ซึ่งประกอบด้วยค่าจำนวนเต็ม N งานของเราคือ สร้างโปรแกรมสำหรับค้นหาองค์ประกอบแรกที่ปรากฏในอาร์เรย์เป็นจำนวนคู่ . หากมีองค์ประกอบใดที่ตรงตามเงื่อนไขส่งคืน มิฉะนั้นให้คืนค่า -1 แสดงว่า เท็จ .
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input: arr[] = {2, 3, 7, 2, 3, 6, 4, 1, 2} Output: 3
แนวทางการแก้ปัญหา
วิธีง่ายๆ ในการแก้ปัญหาคือการพิจารณาแต่ละองค์ประกอบของอาร์เรย์ทีละรายการ จากนั้นจึงตรวจสอบความถี่การเกิดขึ้นขององค์ประกอบแบบคู่ และส่งคืนองค์ประกอบแรกในอาร์เรย์ด้วยความถี่การเกิดขึ้นที่เท่ากัน อีกวิธีในการแก้ปัญหาคือการใช้ hash map โครงสร้างข้อมูล. สำหรับสิ่งนี้ เราจะสำรวจอาร์เรย์และสร้าง hash map ที่จัดเก็บองค์ประกอบพร้อมกับความถี่ของการเกิดเป็นสลับ กล่าวคือ จริงหรือเท็จ โดยพิจารณาจากข้อเท็จจริงที่ว่ามันเท่ากันหรือไม่ ซึ่งจะช่วยลดค่าใช้จ่ายในการตรวจสอบว่าความถี่ที่เกิดขึ้นเป็นจริงหรือเท็จ เนื่องจากปุ่มสลับจะแสดงผลลัพธ์ที่ต้องการ สำหรับแผนที่ องค์ประกอบแรกที่มีค่าเป็นจริง (แสดงถึงความถี่ของการเกิดขึ้น) คือผลลัพธ์ที่เราต้องการ
เราจะสำรวจอาร์เรย์และสำหรับแต่ละค่าในอาร์เรย์เช่น arr[i] เราจะตรวจสอบในแผนที่
หากไม่มีอยู่ในแผนที่ ให้เพิ่มลงในแผนที่ด้วยค่าสลับ 'เท็จ '. หากมีอยู่ในแผนที่ ให้สลับค่าปัจจุบันที่ตรงกับค่านั้น เช่น หากเป็น 'จริง ' ทำให้เป็น 'เท็จ ' และถ้าเป็น 'เท็จ ' ทำให้ 'จริง '.
หลังจากการวนซ้ำของอาร์เรย์ ให้วนซ้ำแผนที่และคืนค่าแรกด้วยค่าสลับที่สอดคล้องกันเป็น 'จริง '.
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <bits/stdc++.h> using namespace std; int findFirstEvenFreqVal(int arr[], int n){ unordered_map<int, bool> freqTogMap; for (int i = 0; i < n; i++){ if (freqTogMap.find(arr[i]) == freqTogMap.end()) freqTogMap.insert(pair <int,bool> (arr[i],false)); else { bool val = freqTogMap.find(arr[i])->second; if (val == true) freqTogMap.find(arr[i])->second = false; else freqTogMap.find(arr[i])->second = true; } } int j = 0; for (j = 0; j < n; j++){ if (freqTogMap.find(arr[j])->second == true) return arr[j];; } return -1; } int main(){ int arr[] = { 2, 4, 6, 8, 1, 6 }; cout<<"The first element of the array which appears even number of times is " <<findFirstEvenFreqVal(arr, 6); return 0; }
ผลลัพธ์
The first element of the array which appears even number of times is 6