Algorithm to Compute the Revenue Milestones
- 时间:2020-10-07 14:38:56
- 分类:网络文摘
- 阅读:82 次
Revenue Milestones
X keeps track of the revenue X makes every day, and X wants to know on what days X hits certain revenue milestones. Given an array of the revenue on each day, and an array of milestones X wants to reach, return an array containing the days on which X reached every milestone.
1 int[] getMilestoneDays(int[] revenues, int[] milestones)int[] getMilestoneDays(int[] revenues, int[] milestones)Input
revenues is a length-N array representing how much revenue X made on each day (from day 1 to day N). milestones is a length-K array of total revenue milestones.Output
Return a length-K array where K_i is the day on which X first had milestones[i] total revenue. If the milestone is never met, return -1.Example
revenues = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
milestones = [100, 200, 500]
output = [4, 6, 10]Explanation
On days 4, 5, and 6, X has total revenue of $100, $150, and $210 respectively. Day 6 is the first time that X has >= $200 of total revenue.
Using HashMap and Sorting to Compute the Revenue Milestones
The Milestones are not given in order. We can use a hash map to remember the indices and sort them. Then we can go through the revenue array and accumulate the total sum. Then we can use pointer to milestones to go through each milestone in ascending order, and reorder the day that achieve the milestone.
We have to use a while loop to iteratively check current total revenue is exceeding the current minimal milestone. The complexity is O(MN) where M is the number of days (size of revenue array) and N is the size of the milestones respectively.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | vector<int> getMilestoneDays(vector<int> revenues, vector<int> milestones) { vector<int> ans(milestones.size(), -1); // remember the milestone's indices unordered_map<int, int> idx; for (int i = 0; i < milestones.size(); ++ i) { idx[milestones[i]] = i; } sort(begin(milestones), end(milestones)); int sum = 0; for (size_t i = 0, j = 0; j < revenues.size(); ++ j) { sum += revenues[j]; // start from the current smallest milestone while ((i < milestones.size()) && (sum >= milestones[i])) { ans[idx[milestones[i]]] = j + 1; i ++; } } return ans; } |
vector<int> getMilestoneDays(vector<int> revenues, vector<int> milestones) { vector<int> ans(milestones.size(), -1); // remember the milestone's indices unordered_map<int, int> idx; for (int i = 0; i < milestones.size(); ++ i) { idx[milestones[i]] = i; } sort(begin(milestones), end(milestones)); int sum = 0; for (size_t i = 0, j = 0; j < revenues.size(); ++ j) { sum += revenues[j]; // start from the current smallest milestone while ((i < milestones.size()) && (sum >= milestones[i])) { ans[idx[milestones[i]]] = j + 1; i ++; } } return ans; }
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:Freenom免费域名申请与DNS解析设置,可申请.tk.ml等域名 Heroku免费云空间512M内存可绑定域名 Freehostia免费虚拟主机提供免费空间大小1GB月流量6GB Awardspace免费php空间稳定可绑域名没有广告500MB空间 一站式商旅及费用管理平台“汇联易”完成3亿元C+轮融资 研究完各路大神,终于知道你做项目失败的原因了 以技术战疫 融云入围"创客北京2020"疫情防控专题赛50强 微信视频号如何注册?微信视频号如何运营吗? 思创客品牌咨询 帮你的品牌牢牢守住市场地位 为什么说餐饮行业也需要微博营销
- 评论列表
-
- 添加评论