สมมติว่าเรามีตัวเลขอาร์เรย์และตัวเลขหนึ่งตัว เราสามารถเพิ่มองค์ประกอบในอาร์เรย์ เพื่อให้ตัวเลขใดๆ ในช่วง [1, n] (รวมทั้งสองอย่าง) เกิดขึ้นได้จากผลรวมขององค์ประกอบบางอย่างในอาร์เรย์ เราต้องหาจำนวนแพตช์ที่จำเป็นขั้นต่ำ ดังนั้นเมื่ออาร์เรย์เป็นเหมือน [1,4] และตัวเลขที่กำหนดคือ n =7 ดังนั้นเอาต์พุตจะเป็น 1 เนื่องจากในตอนแรก ตัวเลขคือ [1], [4] และ [1,4] =5 ตอนนี้ถ้าเราบวก 2 ลงในอาร์เรย์ แล้ว nums จะเป็น [1], [2], [4], [1,2], [1,4],[2,4], [1,2,4] ดังนั้นผลรวม ค่าจะเป็น 1, 2, 4, 3, 5, 6, 7 ตามลำดับ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
req :=1, i :=0, ret :=0
-
ในขณะที่ req <=n ทำ -
-
ถ้าฉัน <ขนาดของ nums และ nums[i] <=req แล้ว
-
req =req + nums[i]
-
เพิ่มขึ้น 1
-
-
มิฉะนั้น
-
req =req + req
-
เพิ่มขึ้น 1
-
-
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: int minPatches(vector<int>& nums, int n) { long long int req = 1; int i = 0; int ret = 0; while(req <= n){ if(i < nums.size() && nums[i] <= req){ req += nums[i]; i++; } else { req += req; ret++; } } return ret; } }; main(){ Solution ob; vector<int> v = {1,4}; cout << (ob.minPatches(v, 7)); }
อินพุต
{1,4}
ผลลัพธ์
1