给定“N”件商品的价格列表。一个人只能以任何价格购买一件物品,他可以免费获得其他物品,以便其余物品的总价不超过所购买物品的价格。任务是找到这个人可以拥有的最大数量的物品。
例子:
Input: n = 5, arr = {5, 3, 1, 5, 6}
Output: 3
The person can buy any item of price 5 or 6 and download items of prices 1 and 3 for free. So, he can get at most 3 items.
Input: n = 2, arr = {7, 7}
Output: 2
方法:
The person should buy the most expensive item and then start taking the items starting from the least pricing (until the total price is lest than or equal to the bought item) in order to maximize the total number of items.
Thus, we sort the list of prices and choose the last element, then we will iterate from 1st index to n-2 index and check if the total sum is less than or equal to the last element.
下面是上述方法的实现:
C++
// C++ implementation of
// the above approach
#include
using namespace std;
// Function to count the
// total number of items
int items(int n, int a[]){
// Sort the prices
sort(a,a+n);
// Choose the last element
int z = a[n-1];
// Initial count of item
int x = 1;
// Sum to keep track of
// the total price
// of free items
int s = 0;
for (int i=0;i
Java
// Java implementation of
// the above approach
import java.util.Arrays;
import java.io.*;
class GFG {
// Function to count the
// total number of items
static int items(int n, int a[]){
// Sort the prices
Arrays.sort(a);
// Choose the last element
int z = a[n-1];
// Initial count of item
int x = 1;
// Sum to keep track of
// the total price
// of free items
int s = 0;
for (int i=0;i
Python3
# Python3 implementation of
# the above approach
# Function to count the
# total number of items
def items(n, a):
# Sort the prices
a.sort()
# Choose the last element
z = a[n-1]
# Initial count of item
x = 1
# Sum to keep track of
# the total price
# of free items
s = 0
for i in range(0, n-1):
s += a[i]
# If total is less than
# or equal to z then
# we will add 1 to the answer
if (s <= z):
x+= 1
else:
break
return x
n = 5
a = [5, 3, 1, 5, 6]
print(items(n, a))
C#
// C# implementation of the
// above approach
using System;
class GFG
{
// Function to count the
// total number of items
static int items(int n, int []a)
{
// Sort the prices
Array.Sort(a);
// Choose the last element
int z = a[n - 1];
// Initial count of item
int x = 1;
// Sum to keep track of
// the total price
// of free items
int s = 0;
for (int i = 0; i < n - 1; i++)
{
s += a[i];
// If total is less than or equal to z
// then we will add 1 to the answer
if (s <= z)
x += 1;
else
break;
}
return x;
}
// Driver code
static public void Main ()
{
int n = 5;
int []a = {5, 3, 1, 5, 6};
Console.WriteLine(items(n, a));
}
}
// This code is contributed
// by akt_mit
PHP
Javascript
3
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。