程序计算在C ++中应追加多少个数字以创建从1到k的所有数字

假设我们有一个称为nums的数字列表,另一个值为k。我们必须找到需要插入到num中的最小数量的数字,以便我们可以使用num中的某些子集从[1,k]中得出任何数字。

因此,如果输入类似于nums = [3,5],k = 6,则输出将为2,因为我们必须插入1、2,所以我们可以使:1 = [1],2 = [2 ],3 = [3],4 = [1、3],5 = [5],6 = [1、5]。

为了解决这个问题,我们将遵循以下步骤-

  • 对数组数字进行排序

  • sum:= 0,下一个:= 1,ret:= 0

  • 对于我所有的数字

    • 从循环中出来

    • 如果总和> = k,则:

    • 总和:=总和+下一个

    • 下一个:= sum + 1

    • (增加ret 1)

    • 从循环中出来

    • 而下一个<i,请执行:

    • 如果总和> = k,则:

    • 和:=和+ i

    • 下一个:= sum + 1

    • 而下一个<= k,请执行以下操作:

      • 总和:=总和+下一个

      • 下一个:= sum + 1

      • (增加ret 1)

    • 返回ret

    让我们看下面的实现以更好地理解-

    示例

    #include

    using namespace std;

    class Solution {

       public:

       int solve(vector& nums, int k) {

          sort(nums.begin(), nums.end());

          int sum = 0;

          int next = 1;

          int ret = 0;

          for (int i : nums) {

             while (next < i) {

                if (sum >= k) break;

                sum += next;

                next = sum + 1;

                ret++;

             }

             if (sum >= k) break;

             sum += i;

             next = sum + 1;

          }

          while (next <= k) {

             sum += next;

             next = sum + 1;

             ret++;

          }

          return ret;

       }

    };

    int solve(vector& nums, int k) {

       return (new Solution())->solve(nums, k);

    }

    int main(){

       vector v = {3, 5};

       int k = 6;

       cout << solve(v, k);

    }

    输入值

    [3, 5], 6

    输出结果

    2

    以上是 程序计算在C ++中应追加多少个数字以创建从1到k的所有数字 的全部内容, 来源链接: utcz.com/z/326428.html

    回到顶部