我们有一个这样的正整数排序数组-
const arr = [1, 3, 6, 10, 11, 15];
我们需要编写一个函数,说findSmallest()
要接受一个这样的数组并返回不能表示为该原始数组某个子数组之和的最小正整数。
例如-
对于上面写成2的该数组,是最小的正整数,无法通过求和该原始数组的任何子数组来达到。因此,现在让我们编写此函数的代码。通过对数组进行排序,我们可以在线性时间内实现此问题的解决方案。我们最初认为所需的数字是1,因为1是可以取的最小值。我们将遍历数组,并继续将相应的元素添加到所需的数字中。
如果在任何迭代中,相应的数字恰好大于所需的数字,则意味着我们找到了所需的数字,否则我们将不断进行迭代。
const arr = [1, 3, 6, 10, 11, 15]; const findSmallest = arr => { let res = 1; for(let ind = 0; ind < arr.length && arr[ind] <= res; ind++){ res += arr[ind]; } return res; }; console.log(findSmallest(arr));
输出结果
控制台中的输出将为-
2