1.题目描述
给你一个数组 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.C++版本
2.1 先求出最大值,分别与剩余糖果相加,与最大值比较(vector)
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
/*
先求出最大值
再分别相加,和最大值作比较
执行用时:4 ms, 在所有 C++ 提交中击败了85.62%的用户
内存消耗:8.9 MB, 在所有 C++ 提交中击败了61.70%的用户
*/
vector<bool> kidsWithCandies(vector<int> &candies, int extraCandies)
{
vector<bool> ans;
int maxValue = candies[0];
int i;
for (i = 0; i < candies.size(); i++)
{
if (candies[i] > maxValue)
{
maxValue = candies[i];
}
}
for (i = 0; i < candies.size(); i++)
{
if (candies[i] + extraCandies < maxValue)
//不能写成ans[i]=false;
ans.push_back(false);
else
ans.push_back(true);
}
return ans;
}
int main()
{
int nums[6] = {1, 2, 3, 1, 1, 3};
vector<int> vec(nums, nums + 6);
int extraCandies = 2;
vector<bool> ans = kidsWithCandies(vec, extraCandies);
for (int i = 0; i < ans.size(); i++)
{
cout << ans[i] << " ";
}
cout << endl;
return 0;
}
2.2 求vector中最大值,使用#include <algorithm>中max_element()
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
/*
先求出最大值
再分别相加,和最大值作比较
执行用时:4 ms, 在所有 C++ 提交中击败了85.52%的用户
内存消耗:8.8 MB, 在所有 C++ 提交中击败了87.73%的用户
*/
vector<bool> kidsWithCandies(vector<int> &candies, int extraCandies)
{
//建议一个和candies大小相同的bool的vector
vector<bool> ans(candies.size(), false);
auto maxValue = max_element(candies.begin(), candies.end());
//vector<int>::iterator maxValue = max_element(begin(candies), end(candies));
for (int i = 0; i < candies.size(); i++)
{
if (candies[i] + extraCandies >= *maxValue)
ans[i] = true;
}
return ans;
}
int main()
{
int nums[6] = {1, 2, 3, 1, 1, 3};
vector<int> vec(nums, nums + 6);
int extraCandies = 1;
vector<bool> ans = kidsWithCandies(vec, extraCandies);
for (int i = 0; i < ans.size(); i++)
{
cout << ans[i] << " ";
}
cout << endl;
return 0;
}
3.java版本
package com.array.easy.LeetCode1431;
import java.util.ArrayList;
import java.util.List;
/**
* @author GMT
* @version 1.0
* @data 2020年10月13日
*/
public class Solution {
/*
*方法:先求出数组中最大值,然后分别与extraCandies相加,与最大值进行比较
*执行用时:1 ms, 在所有 Java 提交中击败了99.88%的用户内存消耗:38 MB, 在所有 Java 提交中击败了100.00%的用户
*/
public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
//找出candies中最大的值,没有类似max的方法
int maxValue = candies[0];
for (int i = 1; i < candies.length; i++) {
if (candies[i] > maxValue)
maxValue = candies[i];
}
List list = new ArrayList();
for (int i = 0; i < candies.length; i++) {
if (extraCandies + candies[i] >= maxValue)
list.add(true);
else
list.add(false);
}
return list;
}
public static void main(String[] args) {
Solution solution = new Solution();
int[] candies = {2, 4, 5, 9};
int extraCandies = 6;
List ans = solution.kidsWithCandies(candies, extraCandies);
System.out.println(ans);
}
}