腾讯面试题---数字的最小拆分减一操作次数

2020-04-04  本文已影响0人  FreeTheWorld

题目来自牛客网网友分享的腾讯面经
题目描述:

给两个数N,k
每一轮可以进行两种操作的其中一种
1. 所有的数拆分成两个更小的数
2. 所有的数-1
已知拆分操作只能进行k次
问 最少需要多少次把所有数都消去

分析,由于拆分和减一操作是针对所有数,且求最小的操作次数,所以

解法:

def split_nums(n,k):
    sub_max = n #记录每次拆分后的最大值
    count = 0
    while k and sub_max>1: #比较条件是拆分后的值大于1
        if sub_max%2==0:
            sub_max = sub_max//2
        else:
            sub_max = sub_max//2+1
        k-=1
        count+=1
    while sub_max:
        count+=1
        sub_max-=1
    return count
上一篇 下一篇

猜你喜欢

热点阅读