美文网首页
腾讯面试题---数字的最小拆分减一操作次数

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

作者: FreeTheWorld | 来源:发表于2020-04-04 23:10 被阅读0次

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

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

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

  • 1.每次拆分后的两个数字之间要尽可能的相等,或差最小;
  • 2.拆分的次数要尽可能的多,减一操作的数目要尽可能的少;
  • 3.拆分后的两个数的最小值要大于等于1;

解法:

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

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/icrephtx.html