สมมติว่าเรามีอาร์เรย์ที่เรียกว่าบริษัทที่ชื่นชอบ โดยที่ FavoriteCompanies[i] คือรายชื่อบริษัทในรายการโปรดของบุคคล ith เราต้องหาดัชนีของบุคคลที่มีรายชื่อบริษัทโปรดไม่ใช่กลุ่มย่อยของบริษัทในรายการโปรดอื่นๆ
ดังนั้น ถ้าอินพุตเป็นเหมือน FavoriteCompanies =[["TCS", "google", "facebook"], ["google","microsoft"], ["google", "facebook"], ["google"], ["amazon"]] จากนั้นผลลัพธ์จะเป็น [0,1,4] เนื่องจากบุคคลที่มี index=2 มี ["google", "facebook"] ซึ่งเป็นชุดย่อยของ FavoriteCompanies[0]=[" TCS", "google", "facebook"] ตรงกับบุคคลที่มีดัชนี 0
ตอนนี้ บุคคลที่มี index=3 มี ["google"] ซึ่งเป็นชุดย่อยของ FavoriteCompanies[0]=["TCS", "google", "facebook"] และ favoriteCompanies[1]=["google", "microsoft"] . รายชื่อบริษัทโปรดอื่นๆ ไม่ได้เป็นส่วนหนึ่งของรายการอื่น ดังนั้น คำตอบคือ [0,1,4]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน ok() ซึ่งจะใช้อาร์เรย์ a อาร์เรย์ b
-
cnt :=0, ผม :=0, j :=0
-
ในขณะที่ (i <ขนาดของ a และ j <ขนาดของ b) ทำ −
-
ถ้า a[i] เหมือนกับ b[j] แล้ว −
-
(เพิ่ม i, j และ cnt โดย 1)
-
-
มิฉะนั้นเมื่อ a[i]
-
(เพิ่ม i ขึ้น 1)
-
-
มิฉะนั้น
-
(เพิ่มขึ้น j โดย 1)
-
-
-
คืนค่า true เมื่อ cnt
-
จากวิธีหลัก ให้ทำดังต่อไปนี้ −
-
กำหนดหนึ่งชุด s
-
n :=ขนาด f
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
จัดเรียงอาร์เรย์ f[i]
-
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ค :=จริง
-
สำหรับการเริ่มต้น j :=0 เมื่อ j
-
ถ้าฉันเหมือนกับ j แล้ว −
-
ละเว้นส่วนต่อไปนี้ ข้ามไปยังการทำซ้ำถัดไป
-
-
c :=c และ ok(f[i], f[j])
-
-
ถ้า c ไม่ใช่ศูนย์ ดังนั้น −
-
ใส่ i ลงใน s
-
-
-
คืนค่าองค์ประกอบของ s เป็นอาร์เรย์
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: bool ok(vector<string>& a, vector<string>& b){ int cnt = 0; int i = 0; int j = 0; while (i < a.size() && j < b.size()) { if (a[i] == b[j]) { i++; j++; cnt++; } else if (a[i] < b[j]) { i++; } else { j++; } } return cnt < a.size(); } vector<int> peopleIndexes(vector<vector<string> >& f){ set<int> s; int n = f.size(); for (int i = 0; i < n; i++) { sort(f[i].begin(), f[i].end()); } for (int i = 0; i < n; i++) { bool c = true; for (int j = 0; j < n; j++) { if (i == j) continue; c &= ok(f[i], f[j]); } if (c) s.insert(i); } return vector<int>(s.begin(), s.end()); } }; main(){ Solution ob; vector<vector<string>> v = {{"TCS","google","facebook"},{"google","microsoft"},{"google","facebo ok"},{"google"},{"amazon"}}; print_vector(ob.peopleIndexes(v)); }
อินพุต
{{"TCS","google","facebook"},{"google","microsoft"},{"google","facebook"},{"google"},{"amazon"}}
ผลลัพธ์
[0, 1, 4, ]