在股票市场中,有一种产品拥有无限的股票。股票价格,给出了N天,其中常用3的股票[i]表示价格上的第i个天。有一个规则,一个客户最多可我的股票就买我第一天。如果客户最初有 k金额,找出客户可以购买的最大股票数量。
例如,3 天的股票价格为 7、10、4。您可以在第 1 天购买 1 只价值 7 卢比的股票,在第 2 天购买 2 只价值 10 卢比的股票,以及每天购买 3 只价值 4 卢比的股票3.
例子:
Input : price[] = { 10, 7, 19 },
k = 45.
Output : 4
A customer purchases 1 stock on day 1,
2 stocks on day 2 and 1 stock on day 3 for
10, 7 * 2 = 14 and 19 respectively. Hence,
total amount is 10 + 14 + 19 = 43 and number
of stocks purchased is 4.
Input : price[] = { 7, 10, 4 },
k = 100.
Output : 6
这个想法是使用贪婪的方法,我们应该从股票价格最低的那一天开始购买产品等等。
所以,我们将根据股票价格对这对两个值即{股票价格,天}进行排序,如果股票价格相同,则我们根据天进行排序。
现在,我们将沿着已排序的货币对列表遍历,并开始如下购买:
比方说,到现在为止我们还剩下R rs,而这一天的产品成本是C,那么我们最多可以在这一天购买L个产品,
当日总购买量 (P) = min(L, R/C)
现在,将此值添加到答案中。
当日总购买量 (P) = min(L, R/C)
现在,将此值添加到答案中
total_purchase = total_purchase + P,其中 P =min(L, R/C)
现在,从剩余的钱中减去购买 P 件物品的成本,R = R – P*C。
我们可以购买的产品总数等于 total_purchase。
下面是这个方法的实现:
C++
// C++ program to find maximum number of stocks that
// can be bought with given constraints.
#include
using namespace std;
// Return the maximum stocks
int buyMaximumProducts(int n, int k, int price[])
{
vector > v;
// Making pair of product cost and number
// of day..
for (int i = 0; i < n; ++i)
v.push_back(make_pair(price[i], i + 1));
// Sorting the vector pair.
sort(v.begin(), v.end());
// Calculating the maximum number of stock
// count.
int ans = 0;
for (int i = 0; i < n; ++i) {
ans += min(v[i].second, k / v[i].first);
k -= v[i].first * min(v[i].second,
(k / v[i].first));
}
return ans;
}
// Driven Program
int main()
{
int price[] = { 10, 7, 19 };
int n = sizeof(price)/sizeof(price[0]);
int k = 45;
cout << buyMaximumProducts(n, k, price) << endl;
return 0;
}
Python3
# Python3 program to find maximum number of stocks
# that can be bought with given constraints.
# Returns the maximum stocks
def buyMaximumProducts(n, k, price):
# Making pair of stock cost and day number
arr = []
for i in range(n):
arr.append([i + 1, price[i]])
# Sort based on the price of stock
arr.sort(key = lambda x: x[1])
# Calculating the max stocks purchased
total_purchase = 0
for i in range(n):
P = min(arr[i][0], k//arr[i][1])
total_purchase += P
k -= (P * arr[i][1])
return total_purchase
# Driver code
price = [ 10, 7, 19 ]
n = len(price)
k = 45
print(buyMaximumProducts(n, k, price))
# This code is contributed by Tharun Reddy
输出:
4
时间复杂度: O(nlogn)。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。