which Kid that has most candles 算法题
which Kid that has most candies algorithm problem
我正在 leetcode 上解决这个问题:
给定一个数组 candies 和整数 extraCandies,其中 candies[i] 表示第 ith 个孩子拥有的糖果数量。
对于每个孩子,检查是否有办法在孩子中分配额外的糖果,以便他或她可以在他们中获得最多的糖果。请注意,多个孩子可以拥有最大数量的糖果。
示例 1:
- 输入:糖果 = [2,3,5,1,3],额外糖果 = 3
- 输出:[真、真、真、假、真]
解释:
- 孩子 1 有 2 个糖果,如果他或她收到所有额外的糖果,(3) 将有 5 个糖果 --- 孩子中糖果数量最多。
- 孩子 4 有 1 个糖果,即使他或她收到所有额外的糖果也只有 4 个糖果。
- 孩子 5 有 3 颗糖果,如果他或她收到至少 2 颗额外的糖果,那么他或她的糖果数量将是孩子中最多的。
我放了 console.log('true')
& console.log('false')
这样我就可以在代码成功执行其功能时看到 true/false 打印。但它只打印一次 true
。
这是我的代码。请告诉我我错了什么或遗漏了什么:
const candies = [2, 3, 5, 1, 3]
const extraCandies = 3;
var kidsWithCandies = (candies, extraCandies) => {
var max = candies.reduce(function(a, b) {
return Math.max(a, b);
});
var min = candies.reduce(function(a, b) {
return Math.min(a, b);
});
console.log(min)
console.log(max)
for (let i = 0; i < candies.length; i++) {
if (candies[i] === max) {
return true
} else if (candies[i] = candies[i] + extraCandies < max) {
return false
} else if (candies[i] = candies[i] + extraCandies > max) {
return true
} else if (candies[i] === min) {
//> max
candies[i] = candies[i] + extraCandies
if (candies[i] > max) {
return true
} else if (candies[i] < max) {
return false
}
}
};
}
这些将传入 Java脚本:
const kidsWithCandies = (candies, extraCandies) => {
const maxCandies = Math.max(...candies);
return candies.map(candy => candy + extraCandies >= maxCandies);
};
console.log(kidsWithCandies(candies = [2, 3, 5, 1, 3], extraCandies = 3))
const kidsWithCandies = (candies, extraCandies) => {
let maxCandies = 0;
const greatest = [];
for (const candy of candies) {
(candy > maxCandies) && (maxCandies = candy);
}
for (let index = 0; index < candies.length; ++index) {
greatest.push(candies[index] + extraCandies >= maxCandies);
}
return greatest;
};
console.log(kidsWithCandies(candies = [4,2,1,1,2], extraCandies = 1))
Spread syntax (...) allows an iterable such as an array expression or
string to be expanded in places where zero or more arguments (for
function calls) or elements (for array literals) are expected, or an
object expression to be expanded in places where zero or more
key-value pairs (for object literals) are expected.
Python
class Solution:
def kidsWithCandies(self, candies, extraCandies):
max_candies = max(candies)
return [candy + extraCandies >= max_candies for candy in candies]
Java
在 Java 中,我们将使用 Arrays.stream
:
public final class Solution {
public static final List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
int maxCandies = Arrays.stream(candies).max().getAsInt();
return Arrays.stream(candies).mapToObj(candy -> candy + extraCandies >= maxCandies).collect(Collectors.toList());
}
}
运行时间是N阶
参考资料
我正在 leetcode 上解决这个问题:
给定一个数组 candies 和整数 extraCandies,其中 candies[i] 表示第 ith 个孩子拥有的糖果数量。 对于每个孩子,检查是否有办法在孩子中分配额外的糖果,以便他或她可以在他们中获得最多的糖果。请注意,多个孩子可以拥有最大数量的糖果。
示例 1:
- 输入:糖果 = [2,3,5,1,3],额外糖果 = 3
- 输出:[真、真、真、假、真]
解释:
- 孩子 1 有 2 个糖果,如果他或她收到所有额外的糖果,(3) 将有 5 个糖果 --- 孩子中糖果数量最多。
- 孩子 4 有 1 个糖果,即使他或她收到所有额外的糖果也只有 4 个糖果。
- 孩子 5 有 3 颗糖果,如果他或她收到至少 2 颗额外的糖果,那么他或她的糖果数量将是孩子中最多的。
我放了 console.log('true')
& console.log('false')
这样我就可以在代码成功执行其功能时看到 true/false 打印。但它只打印一次 true
。
这是我的代码。请告诉我我错了什么或遗漏了什么:
const candies = [2, 3, 5, 1, 3]
const extraCandies = 3;
var kidsWithCandies = (candies, extraCandies) => {
var max = candies.reduce(function(a, b) {
return Math.max(a, b);
});
var min = candies.reduce(function(a, b) {
return Math.min(a, b);
});
console.log(min)
console.log(max)
for (let i = 0; i < candies.length; i++) {
if (candies[i] === max) {
return true
} else if (candies[i] = candies[i] + extraCandies < max) {
return false
} else if (candies[i] = candies[i] + extraCandies > max) {
return true
} else if (candies[i] === min) {
//> max
candies[i] = candies[i] + extraCandies
if (candies[i] > max) {
return true
} else if (candies[i] < max) {
return false
}
}
};
}
这些将传入 Java脚本:
const kidsWithCandies = (candies, extraCandies) => {
const maxCandies = Math.max(...candies);
return candies.map(candy => candy + extraCandies >= maxCandies);
};
console.log(kidsWithCandies(candies = [2, 3, 5, 1, 3], extraCandies = 3))
const kidsWithCandies = (candies, extraCandies) => {
let maxCandies = 0;
const greatest = [];
for (const candy of candies) {
(candy > maxCandies) && (maxCandies = candy);
}
for (let index = 0; index < candies.length; ++index) {
greatest.push(candies[index] + extraCandies >= maxCandies);
}
return greatest;
};
console.log(kidsWithCandies(candies = [4,2,1,1,2], extraCandies = 1))
Spread syntax (...) allows an iterable such as an array expression or string to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected, or an object expression to be expanded in places where zero or more key-value pairs (for object literals) are expected.
Python
class Solution:
def kidsWithCandies(self, candies, extraCandies):
max_candies = max(candies)
return [candy + extraCandies >= max_candies for candy in candies]
Java
在 Java 中,我们将使用 Arrays.stream
:
public final class Solution {
public static final List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
int maxCandies = Arrays.stream(candies).max().getAsInt();
return Arrays.stream(candies).mapToObj(candy -> candy + extraCandies >= maxCandies).collect(Collectors.toList());
}
}
运行时间是N阶