题目
给你一个数组 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]
提示:
2 <= candies.length <= 100
1 <= candies[i] <= 100
1 <= extraCandies <= 50
来源:力扣(LeetCode)
链接:https:///problems/kids-with-the-greatest-number-of-candies
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析
题目是有些绕,其实题目的意思就是:数组中的每个元素加上额外的值,同数组中的最大值做比较,如果大于等于最大值则返回true结果,否则返回false。
代码
Java代码
import java.util.ArrayList;
import java.util.List;
public class Demo {
/**
* 求哪些孩子是拥有糖果最多的孩子
*
* @param candies 数组
* @param extraCandies 额外的值
* @return 返回一个布尔类型的集合
*/
public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
List<Boolean> list = new ArrayList<Boolean>();
/* 找寻数组中的最大值 */
int max = candies[0];
for (int i = 0; i < candies.length; i++) {
if (candies[i] > max) {
max = candies[i];
}
}
/* 将candies[i]+extraCandies与最大值进行比较 */
for (int i = 0; i < candies.length; i++) {// 循环遍历
if (candies[i] + extraCandies >= max) {// 如果大于等于max
list.add(true);// 则返回true
} else {
list.add(false);// 否则返回false
}
}
return list;
}
public static void main(String[] args) {
/* 测试 */
int[] candies = new int[]{4, 2, 1, 1, 2};
int extraCandies = 1;
List<Boolean> booleans = new Demo().kidsWithCandies(candies, extraCandies);
for (Boolean aBoolean : booleans) {
System.out.print(aBoolean + "\t");
}
}
}
测试结果:
C语言代码
#include <stdio.h>
#include <stdlib.h>
/* 打印数组 */
/* a[]指的是要被打印的数组;length指的是数组中的元素个数 */
void printArray(int a[],int length) {
printf("\n");
for(int i=0; i<length; i++) {
printf("%d\t",a[i]);
}
printf("\n");
}
/* 寻找糖果最多的孩子 */
/* candies[]指的是糖果数组;candiesSize指的是糖果数组的长度;extraCandies指的是额外的糖果数;result[]指的是结果数组 */
void kidsWithCandies(int candies[],int candiesSize,int extraCandies,int result[]) {
/* 寻找数组中的最大值 */
int max=candies[0];// 将数组的第一个元素暂时指定为最大值
for(int i=0; i<candiesSize; i++) {// 循环遍历数组中的每个元素
if(candies[i]>max) {// 如果数组中的第i个元素大于max则将candies[i]置为最大值
max=candies[i];
}
}
/* 将数组中的每个元素加上额外值再与最大值做比较 */
for(int i=0; i<candiesSize; i++) {
if(candies[i]+extraCandies>=max) {// 判断candies[i]+extraCandies>=max
result[i]=1;// 如果大于则返回true
} else {
result[i]=0;// 否则返回false,这里用1和0表示
}
}
}
int main() {
// 测试示例包含了题目所给的几种情况
printf("实例1:");
int candies[]= {2,3,5,1,3};
int candiesSize=5;
int result[candiesSize];
int extraCandies=3;
printArray(candies,candiesSize);// 打印操作前的数组元素
/* 测试1 */
kidsWithCandies(candies,candiesSize,extraCandies,result);
printArray(result,candiesSize);
printf("实例2:");
int candies2[]= {4,2,1,1,2};
int candiesSize2=5;
int result2[candiesSize2];
int extraCandies2=1;
printArray(candies2,candiesSize2);// 打印操作前的数组元素
/* 测试2 */
kidsWithCandies(candies2,candiesSize2,extraCandies2,result2);
printArray(result2,candiesSize2);
printf("实例3:");
int candies3[]= {12,1,12};
int candiesSize3=3;
int result3[candiesSize3];
int extraCandies3=10;
printArray(candies3,candiesSize3);// 打印操作前的数组元素
/* 测试3 */
kidsWithCandies(candies3,candiesSize3,extraCandies3,result3);
printArray(result3,candiesSize3);
return 0;
}
测试结果: