LeetCode330. Patching Array【贪心】

来源:互联网 发布:大数据法律法规 编辑:程序博客网 时间:2024/05/09 19:38

题意

        告诉你几个元素组成的数组nums[ ]和表示范围n,问最少向数组中添加多少元素使得从nums[ ]中若干元素之和能够覆盖[1..n]

思路

      cur表示当前能表示的范围为[1..cur],扫描nums[ ],贪心原则如下:

     若nums[i]<=2*cur + 1,把nums[i]添加进来,表示范围更新[1..cur+nums[i]];

     若nums[i]>2*cur + 1,添加新的元素cur+1,表示范围更新[1..2*cur+1].

     cur0开始

注意

      cur可能溢出

class Solution {public:    int minPatches(vector<int>& nums, int n) {       long long cur = 0;       int i = 0,add = 0;       while(cur<n){       if(i < nums.size()&&nums[i] <= cur + 1) {        cur +=nums[i];        i ++ ;       }    else {        add++;        cur = 2*cur + 1;      }    }    return add;      }};


1 0