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

Assign Cookies ใน C++

แนวคิด

สมมติว่ากำลังพยายามแจกคุกกี้ให้เด็กๆ แต่ควรให้เด็กแต่ละคนได้สูงสุดหนึ่งคุกกี้ เด็กแต่ละคน i มี greed factor gi คือขนาดขั้นต่ำของคุกกี้ที่เด็กจะพอใจ และคุกกี้แต่ละชิ้น j มีขนาด sj เมื่อ sj >= gi สามารถมอบคุกกี้ j ให้เด็ก i ได้ และเด็ก i จะพอใจ เป้าหมายคือเพิ่มจำนวนเด็กที่พอใจให้มากที่สุดและแสดงจำนวนสูงสุด

เช่น ถ้าอินพุตคือ [1,2], [1,2,3] ผลลัพธ์คือ 2 มีเด็ก 2 คน คุกกี้ 3 ชิ้น Greed factors คือ 1, 2 มีคุกกี้ 3 ชิ้นขนาดพอที่จะทำให้เด็กทุกคนพอใจ ดังนั้นผลลัพธ์คือ 2

วิธีแก้:

  • เรียงอาร์เรย์ g
  • เรียงอาร์เรย์ s
  • i := 0, j = 0
  • while (i < ขนาด g และ j < ขนาด s): ถ้า g[i] <= s[j]: เพิ่ม i ขึ้น 1, เพิ่ม j ขึ้น 1
  • คืนค่า i

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int i = 0, j = 0;
        while (i < g.size() && j < s.size()) {
            if (g[i] <= s[j]) i++;
            j++;
        }
        return i;
    }
};
main() {
    Solution ob;
    vector<int> v = {1,2}, v1 = {1,2,3};
    cout << (ob.findContentChildren(v, v1));
}

อินพุต

{1,2}, {1,2,3}

เอาต์พุต

2