leetcode刷刷题(47) ---- 拥有最多糖果的孩子(C语言版)

2020-6-7
  • If 10% of the profits,capital will ensure being used everywhere;
    20% of the profits,capital can active;
    50% of the profits,capital will rush into danger。
    for 100% of the profits,capital would dare to trample all human laws;
    there are more than 300% of the profits,capital would dare to commit any crimes,and even go to the first to take the risk of strangulation。
    如果有10%的利润,资本就会保证到处被使用;
    有20%的利润,资本就能活跃起来;
    有50%的利润,资本就会铤而走险;
    为了100%的利润,资本就敢践踏一切人间法律;
    有300%以上的利润,资本就敢犯任何罪行,甚至去冒绞首的危险。
    马克思 --《资本论》
题目
  • leetcode – 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]
 
提示:
2 <= candies.length <= 100
1 <= candies[i] <= 100
1 <= extraCandies <= 50

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
个人解答:(C版本)
  • 先找到未分配前单个孩子拥有糖果数量的最大值,然后逐个让每个孩子的糖果数量加上额外提供的数量与那个最大值作比较,大于等于为真,小于为假。
	// Note: The returned array must be malloced, assume caller calls free().
	bool* kidsWithCandies(int* candies, int candiesSize, int extraCandies, int* returnSize){
	    if(candies == NULL || candiesSize<=0)
	        return NULL;
	    bool* ret = (bool*)malloc(candiesSize*sizeof(bool));
	
	    int max = 0;
	    for(int i=0; i<candiesSize; ++i)
	    {
	        if(candies[i] > max)
	        {
	            max = candies[i];
	        }
	    }
	
	    for(int i=0; i<candiesSize; ++i)
	    {
	        if(candies[i]+extraCandies >= max)
	        {
	            ret[i] = true;
	        }
	        else
	        {
	            ret[i] = false;
	        }
	    }
	
	    *returnSize = candiesSize;
	    return ret;
	}
  • 复杂度分析
    1)时间复杂度:一遍查找,一遍比较,O(N)。
    2)空间复杂度:由于要申请n个空间来存储结果,所以为O(N)。
  • 运行结果:
    在这里插入图片描述
他山之石:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值