Google 面试题:数组补丁

Question

给出一个从小到大排好序的整数数组 nums 和一个整数 n,在数组中添加若干个补丁(元素)使得 [1,n] 的区间内的所有数都可以表示成 nums 中若干个数的和。返回最少需要添加的补丁个数。

Example1:

nums = [1, 3], n = 6
返回1,表示至少需要添加1个数{2},才可以表示1到6之间所有数。

Example2:

nums = [1, 5, 10], n = 20
返回2,表示至少需要添加两个数{2,4},才可以表示1到20之间所有数。

Answer

 

def Solution(Source, Des):
    Sum = 0;
    j = 0;
    Index = 0
    AddData = []
    
    if(Source[0]==1 & len(Source)>1):
        Sum = 1;
        j = 0;
    while(Sum<Des):

        if( j< len(Source) ):
            Sum = Sum + Source[j];
        
        j = j+1
        if pow(2, j) not in Source:
            AddData.append(pow(2, j))
            Sum = Sum + AddData[Index] 
            Index = Index + 1
        
       
    return AddData;
    
#Source = [1, 2, 5]
#Des = 9

#Source = [1, 2]
#Des = 9


Source = [1,2,10]
Des = 30

Solution(Source, Des)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值