สมมติว่าเรามีอาร์เรย์ที่มีความยาวเท่ากัน ตัวเลขที่ต่างกันในอาร์เรย์นี้จะแสดงถึงลูกอมประเภทต่างๆ ตอนนี้แต่ละตัวเลขหมายถึงลูกอมหนึ่งชนิดที่เหมือนกัน เราต้องแจกขนมให้พี่น้องเท่าๆกัน เราต้องหาจำนวนลูกอมให้พี่สาวให้ได้มากที่สุด
ดังนั้น หากอินพุตเป็น [1,1,2,3] ผลลัพธ์จะเป็น 2 ราวกับว่าเราถือว่าน้องสาวมีลูกอม [2,3] และน้องชายมีลูกอม [1,1] ตอนนี้พี่สาวมีขนมสองแบบ พี่ชายมีขนมชนิดเดียวเท่านั้น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดหนึ่งชุด s
-
สำหรับการเริ่มต้น i :=0 เมื่อฉัน <ขนาดของขนม อัปเดต (เพิ่ม i ขึ้น 1) ทำ -
-
ใส่ลูกกวาด[i] ลงใน s
-
-
คืนค่าขั้นต่ำของขนาด s และขนาดของขนม / 2
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: int distributeCandies(vector<int>& candies){ unordered_set<int> s; for (int i = 0; i < candies.size(); i++) s.insert(candies[i]); return min(s.size(), candies.size() / 2); } }; main(){ Solution ob; vector<int> v = {1,1,2,3}; cout << (ob.distributeCandies(v)); }
อินพุต
{1,1,2,3}
ผลลัพธ์
2