LeetCode之1431.拥有最多糖果的孩子

概要

题目来源链接:https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies/

难度:简单

类型:数组

题目

给你一个数组 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://leetcode-cn.com/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;
}

测试结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值