3-16 1431.拥有最多糖果的孩子
Date:2022-03-16 08:11:44
题目:1431.拥有最多糖果的孩子 ( 简单😄 )
给你一个数组 candies
和一个整数 extraCandies
,其中 candies[i]
代表第 i
个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies
个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。
示例
示例1:
输入:candies = [2,3,5,1,3], extraCandies = 3
输出:[true,true,true,false,true]
解释:
孩子 1 有 2 个糖果,如果他得到所有额外的糖果(3个),那么他总共有 5 个糖果,他将成为拥有最多糖果的孩子。
孩子 2 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
孩子 3 有 5 个糖果,他已经是拥有最多糖果的孩子。
孩子 4 有 1 个糖果,即使他得到所有额外的糖果,他也只有 4 个糖果,无法成为拥有糖果最多的孩子。
孩子 5 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
示例2:
输入:candies = [4,2,1,1,2], extraCandies = 1
输出:[true,false,false,false,false]
解释:只有 1 个额外糖果,所以不管额外糖果给谁,只有孩子 1 可以成为拥有糖果最多的孩子。
示例3:
输入:candies = [12,1,12], extraCandies = 10
输出:[true,false,true]
分析
额,不多说,就是你想的那个解法
思路:先找出最大值,再让每一个孩子加上额外的糖果,如果超过最大值,那么他就是拥有最多糖果的孩子(true)
题解
function kidsWithCandies(candies: number[], extraCandies: number): boolean[] {
const len = candies.length
let max = -Infinity,
ans: boolean[] = []
for (let i = 0; i < len; ++i) {
max = Math.max(max, candies[i])
}
for (let i = 0; i < len; ++i) {
if (candies[i] + extraCandies >= max) {
ans.push(true)
} else {
ans.push(false)
}
}
return ans
}
使用
function main() {
const candies = [2, 3, 5, 1, 3]
const extraCandies = 3
console.log('[]:', kidsWithCandies(candies, extraCandies))
}
main()
3-16-2 64.求 1+2+…+n
Date:2022年03月16日08:49:42
题目:64. 求 1+2+…+n ( 中等😕 )
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例
示例1:
输入: n = 3
输出: 6
示例2:
输入: n = 9
输出: 45
分析
递归
这里比较容易想到
时间复杂度为 O(n)
「俄罗斯农民乘法」(较难,暂不做了解)
时间复杂度为
O(logn)
题解
递归
function sumNums(n: number): number {
// can not use `if`
// if (n <= 0) {
// return 0
// }
// if `0` return `0`, because blocked
return n && n + sumNums(--n)
}
使用
function main() {
// const n = 3
const n = 9
console.log('[]:', sumNums(n))
}
main()