【发布时间】:2019-10-07 17:58:19
【问题描述】:
您正在开发智能手机应用程序。您有一个应用程序的潜在客户列表。每个客户都有预算,当且仅当价格低于或等于客户的预算时,他们才会以您声明的价格购买应用。
您想确定一个价格,以使您从应用中获得的收入最大化。找出这个可能的最大收入。
例如,假设您有 4 个潜在客户,他们的预算是 30、20、53 和 14。在这种情况下,您可以获得的最大收入是 60。
我的朋友告诉我,只需对数组进行排序并尝试使用
ar[i]*(n-i) 虽然我实施了 我没有理解整个逻辑。真的需要帮助解释
#include<bits/stdc++.h>
using namespace std;
int maximumProfit(int budget[], int n) {
int ans=INT_MIN;
sort(budget,budget+n);
for(int i=0;i<n;i++)
{
ans=max(ans,budget[i]*(n-i));
}
return ans;
}
【问题讨论】:
-
不相关:小心
#include<bits/stdc++.h>和using namespace std;第一个包括整个C++ 标准库。那是成千上万个您没有使用的标识符,您现在必须避免重复使用。您可能甚至不知道存在许多这些标识符。我不。using namespace std;有效地将std命名空间拉入全局命名空间,在那里意外重用的可能性更大。 -
相关:数据排序后,为什么要查找最大值或最小值?除非排序标准真的很奇怪,并且此代码使用默认标准,否则最小值将在数据集的一端,最大值将在另一端。让他们很容易找到。除非您提供了自定义
sort或自定义max函数。在这种情况下,第一条评论变得更加相关。 -
@user4581301 代码正在尝试查找与
budget[i]不同的budget[i] * (n - i)的最大值。 -
解决方法:把代码收起来。用笔和纸算出逻辑。你会如何用你的mark I Brain解决这个问题?记下你的过程。这些注释将成为您必须指示计算机执行的步骤。