9.14 正数数组的最小不可组成和

题目】:

  给定一个正数数组arr,其中所有的值都为整数,以下是最小不可组成和的概念:

    1、把arr每个子集内的所有元素加起来会出现很多值,其中最小的记为min,最大的记为max

    2、在区间[min, max]上,如果有数不可以被arr某一个子集相加得到,那么其中最小的那个数是arr的最小不可组成和

    3、在区间[min, max]上,如果所有的数都可以被arr的某一个子集相加得到,那么max+1是arr的最小不可组成和

  请写函数返回正数数组arr的最小不可组成和

  举例:

    arr=[3, 2, 5],子集{2}相加产生2为min,子集{3, 2, 5}相加产生10为max,在区间[2, 10]上,4、6和9不能被任何子集相加得到,其中4是arr的最小不可组成和

    arr=[1, 2, 4],子集{1}相加产生1为min,子集{1, 2, 4}相加产生7为max,在区间[1, 7]上,任何数都可以被子集相加得到,所以8是arr的最小不可组成和

进阶题目】:

  如果已知正数数组arr中肯定有1这个数,是否能更快地得到最小不可组成和


题目来源:左程云老师《程序员代码面试指南》

猜你喜欢

转载自www.cnblogs.com/latup/p/10151201.html