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;
}

測試結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章