在股票市场中,存在无限股票的产品。股票价格,给出了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)=分钟(L,R / C)
现在,将此值添加到答案中。
这天的总购买量(P)=分钟(L,R / C)
现在,将此值添加到答案中
total_purchase = total_purchase + P,其中P = min(L,R / C)
现在,从剩余的钱中减去购买P项的成本,R = R – P * C。
我们可以购买的产品总数等于total_purchase。
以下是此方法的C++实现:
// CPP 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;
}
输出:
4
时间复杂度: O(nlogn)。