给定糖果总数“ X”,学生数量“ N”和数组“ arr”,其中包含为使学生满意而必须给予学生的确切糖果数量的值,其中arr[i]
是使学生“我”开心的糖果的确切数量。任务是分发糖果,使最大程度的学生高兴。
例子:
Input : X = 70, arr = {20, 30, 10}
Output: 2
One optimal way of distribution is (20, 40, 10)
So, the number of happy students are 2.
Input: X = 10, arr = {20, 30, 10}
Output: 1
One optimal way of distribution is (0, 0, 10)
Only 1 student can be made happy in this case
方法:我们可以开始向那些对小糖果感到满意的学生提供糖果,从而最大程度地增加快乐学生的数量。
因此,我们根据糖果以升序对学生列表进行排序。然后,我们将简单地遍历数组并带学生,直到总和小于或等于糖果总数。
下面是上述方法的实现:
C++
// C++ implementation of the approach
# include
using namespace std;
// Function to find value for
// covering maximum array elements
int maxArrayCover(vector a, int n, int x){
// sort the students in
// ascending based on
// the candies
sort(a.begin(), a.end());
// To store the number
// of happy students
int cc = 0;
// To store the running sum
int s = 0;
for (int i = 0; i < n; i++){
s += a[i];
// If the current student
// can't be made happy
if(s > x){
break;
}
// increment the count
// if we can make the
// ith student happy
cc += 1;
}
// If the sum = x
// then answer is n
if(accumulate(a.begin(), a.end(), 0) == x){
return n;
}
else{
// If the count is
// equal to n then
// the answer is n-1
if(cc == n){
return n-1;
}
else{
return cc;
}
}
}
// Driver function
int main(){
int n = 3;
int x = 70;
vector a = {10, 20, 30};
printf("%d\n",maxArrayCover(a, n, x));
return 0;
}
// This code is contributed
// by Harshit Saini
Java
// Java implementation of the approach
import java.util.*;
class GFG{
// Function to find value for
// covering maximum array elements
public static int maxArrayCover(int[] a, int n, int x){
// sort the students in
// ascending based on
// the candies
Arrays.sort(a);
// To store the number
// of happy students
int cc = 0;
// To store the running sum
int s = 0;
for (int i = 0; i < n; i++){
s += a[i];
// If the current student
// can't be made happy
if(s > x){
break;
}
// increment the count
// if we can make the
// ith student happy
cc += 1;
}
// If the sum = x
// then answer is n
if(Arrays.stream(a).sum() == x){
return n;
}
else{
// If the count is
// equal to n then
// the answer is n-1
if(cc == n){
return n-1;
}
else{
return cc;
}
}
}
// Driver function
public static void main(String []args){
int n = 3;
int x = 70;
int[] a = new int[]{10, 20, 30};
System.out.println(maxArrayCover(a, n, x));
System.exit(0);
}
}
// This code is contributed
// by Harshit Saini
Python3
# Python implementation of the approach
# Function to find value for
# covering maximum array elements
def maxArrayCover(a, n, x):
# sort the students in
# ascending based on
# the candies
a.sort()
# To store the number
# of happy students
cc = 0
# To store the running sum
s = 0
for i in range(n):
s+= a[i]
# If the current student
# can't be made happy
if(s > x):
break
# increment the count
# if we can make the
# ith student happy
cc += 1
# If the sum = x
# then answer is n
if(sum(a) == x):
return n
else:
# If the count is
# equal to n then
# the answer is n-1
if(cc == n):
return n-1
else:
return cc
# Driver function
if __name__ == '__main__':
n, x = 3, 70
a = [10, 20, 30]
print(maxArrayCover(a, n, x))
C#
// C# implementation of the approach
using System;
using System.Linq;
class GFG{
// Function to find value for
// covering maximum array elements
static int maxArrayCover(int[] a, int n, int x){
// sort the students in
// ascending based on
// the candies
Array.Sort(a);
// To store the number
// of happy students
int cc = 0;
// To store the running sum
int s = 0;
for (int i = 0; i < n; i++){
s += a[i];
// If the current student
// can't be made happy
if(s > x){
break;
}
// increment the count
// if we can make the
// ith student happy
cc += 1;
}
// If the sum = x
// then answer is n
if(a.Sum() == x){
return n;
}
else{
// If the count is
// equal to n then
// the answer is n-1
if(cc == n){
return n-1;
}
else{
return cc;
}
}
}
// Driver function
public static void Main(){
int n = 3;
int x = 70;
int[] a = new int[]{10, 20, 30};
Console.WriteLine(maxArrayCover(a, n, x));
}
}
// This code is contributed
// by Harshit Saini
PHP
$x){
break;
}
// increment the count
// if we can make the
// ith student happy
$cc += 1;
}
// If the sum = x
// then answer is n
if(array_sum($a) == $x){
return $n;
}
else{
// If the count is
// equal to n then
// the answer is n-1
if($cc == $n){
return $n-1;
}
else{
return $cc;
}
}
}
$n = 3;
$x = 70;
$a = array(10, 20, 30);
echo maxArrayCover($a, $n, $x);
// This code is contributed
// by Harshit Saini
?>
输出:
2
时间复杂度: O(N * log(N))
空间复杂度: O(N)