📜  如果可以在第 i 天购买 i 只股票,则购买最大股票

📅  最后修改于: 2021-10-26 05:47:45             🧑  作者: Mango

在股票市场中,有一种产品拥有无限的股票。股票价格,给出了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 现场工作专业课程学生竞争性编程现场课程。