ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ของค่าจำนวนเต็ม n ค่า และ Q เคียวรีแต่ละตัวมีจำนวนเต็ม k งานของเราคือการสร้างโปรแกรมเพื่อแก้ปัญหาการสืบค้นสำหรับจำนวนเต็มที่แตกต่างกันในส่วนต่อท้าย
คำอธิบายปัญหา − เราจำเป็นต้องแก้แบบสอบถามสำหรับจำนวนเต็มที่แตกต่างกันในส่วนต่อท้าย สำหรับแต่ละข้อความค้นหา เราจำเป็นต้องค้นหาจำนวนองค์ประกอบที่ไม่ซ้ำตั้งแต่ k ถึง n เช่น นับองค์ประกอบที่ไม่ซ้ำจาก arr[k] ถึง arr[n]
อาร์เรย์ที่รับคือ 1 ดัชนี
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
arr[ ] = {5, 1, 2, 1, 6 , 5}, n = 6, Q = 3, query = {1, 3, 4}
ผลลัพธ์
4 4 3
คำอธิบาย
For Query 1: k = 1, N = 6, Count of elements from arr[1] to arr[6]. Count = 4. For Query 2: k = 3, N = 6, Count of elements from arr[3] to arr[6]. Count = 4 For Query 3: k = 4, N = 6, Count of elements from arr[4] to arr[6]. Count = 3
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายในการแก้ปัญหาแต่ละคำถามโดยเริ่มจากดัชนี k ถึง n และนับองค์ประกอบที่ไม่ซ้ำทั้งหมดของอาร์เรย์และส่งคืนจำนวนการสืบค้นแต่ละครั้ง
วิธีแก้ปัญหาที่มีประสิทธิภาพ
วิธีแก้ปัญหาที่มีประสิทธิภาพคือการใช้โครงสร้างข้อมูลที่คำนวณล่วงหน้าซึ่งเก็บจำนวนเฉพาะสำหรับดัชนีจาก (n-1) ถึง 0 ซึ่งทำได้โดยใช้ชุดที่ไม่เรียงลำดับเพื่อกำจัดการเพิ่มองค์ประกอบที่ซ้ำกัน เรายังสามารถใช้อาร์เรย์เสริมสำหรับการนับเหตุการณ์ได้อีกด้วย
เราจะเพิ่มองค์ประกอบของอาร์เรย์ลงในโครงสร้างข้อมูลของเราโดยเริ่มจากองค์ประกอบสุดท้ายจนถึงองค์ประกอบที่ k แล้วจึงหาจำนวนองค์ประกอบในโครงสร้างข้อมูล (ในกรณีของค่าอาร์เรย์ที่ดัชนี k)
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; void solveQueries_DistInt(int n, int arr[], int Q, int queries[]) { unordered_set<int> uniqueInts; int distIntCount[n + 1]; for (int i = n - 1; i >= 0; i--) { uniqueInts.insert(arr[i]); distIntCount[i + 1] = uniqueInts.size(); } for (int i = 0; i < Q; i++) cout<<"For Query "<<(i+1)<<": the number of distinct integers in Suffix is "<<distIntCount[queries[i]]<<endl; } int main() { int n = 6, Q = 3; int arr[n] = {5, 1, 2, 1, 6, 5}; int queries[Q] = {1, 3, 4}; solveQueries_DistInt(n, arr, Q, queries); return 0; }
ผลลัพธ์
For Query 1: the number of distinct integers in Suffix is 4 For Query 2: the number of distinct integers in Suffix is 4 For Query 3: the number of distinct integers in Suffix is 3