สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n เราต้องการลบองค์ประกอบที่ซ้ำกัน เราต้องการปล่อยเฉพาะรายการขวาสุดสำหรับแต่ละองค์ประกอบของอาร์เรย์ ลำดับสัมพัทธ์ขององค์ประกอบที่ไม่ซ้ำที่เหลือไม่ควรเปลี่ยนแปลง
ดังนั้น หากอินพุตเป็น A =[1, 5, 5, 1, 6, 1] เอาต์พุตจะเป็น [5, 6, 1]
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
Define two arrays b and vis of size: 1200 each x := 0 n := size of A for initialize i := n - 1, when i >= 0, update (decrease i by 1), do: if vis[A[i]] is zero, then: b[x] := A[i] (increase x by 1) vis[A[i]] := 1 for initialize i := x - 1, when i >= 0, update (decrease i by 1), do: print b[i]
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A) {
int b[1200], vis[1200], x = 0;
int n = A.size();
for (int i = n - 1; i >= 0; i--) {
if (!vis[A[i]]) {
b[x] = A[i];
x++;
vis[A[i]] = 1;
}
}
for (int i = x - 1; i >= 0; i--)
cout << b[i] << ", ";
}
int main() {
vector<int> A = { 1, 5, 5, 1, 6, 1 };
solve(A);
} อินพุต
{ 1, 5, 5, 1, 6, 1 } ผลลัพธ์
5, 6, 1,