โจทย์: ให้เลข \(N\) ตัว (\(N \le 2 \cdot 10^5\)) จงหาว่ามีเลขที่แตกต่างกันทั้งหมดกี่ตัว?
ใช้อาเรย์ปกติ แล้ววนลูปซ้อนลูปเพื่อเช็คว่าเลขตัวนี้เคยนับไปหรือยัง
ใช้ std::set เก็บข้อมูล ข้อมูลที่ซ้ำจะถูกปฏิเสธโดยอัตโนมัติ แล้วตอบ s.size()
การใช้ String Replace วนลูปหาคู่จะทำให้ติด TLE ในกรณีวงเล็บซ้อนกันลึกๆ
นับจำนวนเมืองที่แตกต่างกันที่พนักงานเดินทางไป (ข้อมูลเป็น String)
std::unordered_set<string> เพื่อการค้นหาเฉลี่ย \(O(1)\)
รับเลขเข้ามาเรื่อยๆ และต้องหาค่าที่ใหญ่ที่สุด ณ ปัจจุบันเสมอ
std::sort ทุกครั้งที่มีเลขใหม่ (\(O(N^2 \log N)\))
std::priority_queue (\(O(\log N)\) ต่อการเพิ่ม)
auto it = s.lower_bound(x);
if (it == s.begin()) cout << *it;
else if (it == s.end()) cout << *(--it);
else {
int a = *it; it--;
int b = *it;
if (x-b < a-x) cout << b; else cout << a;
}
ใช้ Binary Search ภายใน Tree (\(O(\log N)\)) แทนการ Linear Scan (\(O(N)\))
หาตำแหน่ง \(i, j\) ที่ \(a_i + a_j = X\) โดย \(N \le 2 \cdot 10^5\)
map.count(X - a[i])
ios::sync_with_stdio(0); cin.tie(0); เพื่อ Fast I/O
unordered_map แทน map ถ้าไม่สนลำดับ เพื่อลดจาก \(O(\log N)\) เป็น \(O(1)\)