有 n 个拿着糖果的孩子。给你一个整数数组 candies,其中每个 candies[i] 代表第 i 个孩子拥有的糖果数量,以及一个整数 extracandies,表示你拥有的额外糖果数量。
返回一个长度为 n 的布尔数组结果,其中,如果给第 i 个孩子所有额外的糖果后,他们将获得所有孩子中最多的糖果,则 result[i] 为 true,否则为 false。
请注意,多个孩子可以拥有最多数量的糖果。
基本方法是:
function kidswithcandiesbasic(candies: number[], extracandies: number): boolean[] { let maxcandies = math.max(...candies); let result: boolean[] = []; for (let i = 0; i = maxcandies) { result.push(true); } else { result.push(false); } } return result; }
考虑到限制,该解决方案是有效的。它在允许的时间和空间复杂度内工作。
基本解决方案在时间复杂度上已经是最优的。不过,我们可以专注于让代码更加简洁和干净。
function kidswithcandiesoptimized(candies: number[], extracandies: number): boolean[] { const maxcandies = math.max(...candies); return candies.map(candy => candy + extracandies >= maxcandies); }
console.log(kidsWithCandiesBasic([2,3,5,1,3], 3)); // [true, true, true, false, true] console.log(kidsWithCandiesBasic([4,2,1,1,2], 1)); // [true, false, false, false, false] console.log(kidsWithCandiesBasic([12,1,12], 10)); // [true, false, true] console.log(kidsWithCandiesOptimized([2,3,5,1,3], 3)); // [true, true, true, false, true] console.log(kidsWithCandiesOptimized([4,2,1,1,2], 1)); // [true, false, false, false, false] console.log(kidsWithCandiesOptimized([12,1,12], 10)); // [true, false, true]
寻找最大元素:
条件数组映射:
与额外值的比较:
通过练习此类问题和策略,您可以提高解决问题的能力,并为各种编码挑战做好更好的准备。