Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แจกจ่ายขนมใน C ++


สมมติว่าเรามีอาร์เรย์ที่มีความยาวเท่ากัน ตัวเลขที่ต่างกันในอาร์เรย์นี้จะแสดงถึงลูกอมประเภทต่างๆ ตอนนี้แต่ละตัวเลขหมายถึงลูกอมหนึ่งชนิดที่เหมือนกัน เราต้องแจกขนมให้พี่น้องเท่าๆกัน เราต้องหาจำนวนลูกอมให้พี่สาวให้ได้มากที่สุด

ดังนั้น หากอินพุตเป็น [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