写点什么

ARTS_20200529

用户头像
凌轩
关注
发布于: 2020 年 05 月 29 日

AIgorithm


题目:

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。


注意:你不能在买入股票前卖出股票。


示例 1:

输入: [7,1,5,3,6,4]

输出: 5

解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。

注意:利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。


示例 2:

输入: [7,6,4,3,1]

输出: 0

解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock


我们按照动态规划的思想来思考这道问题

参考:https://blog.csdn.net/Sampson_S/article/details/106408889


  public int maxProfit(int[] prices) {    if (prices.length <= 1) {      return 0;    }
int buy = -prices[0]; int sell = 0; for (int i = 1; i < prices.length; i++) { buy = Math.max(buy, -prices[i]); sell = Math.max(sell, prices[i] + buy); } return sell; }
复制代码


Review


MongoDB 的分组操作

https://docs.mongodb.com/manual/reference/operator/aggregation/group/

示例

    db.getCollection(collection).aggregate([        //按照时间筛选数据        {$match: {'createdAt':{$gte:begintime,$lte:endtime}}},
// 按照来源、类型进行分组 { $group: { _id: {channel: "$source", type: "$type"}, typeTotal: {$sum: 1} } },
//重整数据 { $project: { channel: "$_id.channel", type: "$_id.type", typeTotal: "$typeTotal", _id: 0 } } ])
复制代码


Tip

Java8 stream 集合操作

@Builder(toBuilder = true)@Getter@NoArgsConstructor@AllArgsConstructor@ToStringpublic class BankResult {  private String code;
@JsonFormat(shape = JsonFormat.Shape.STRING) private YearMonth period;
private String bankCode;
private List<Item> items;
@Builder(toBuilder = true) @Getter @AllArgsConstructor @NoArgsConstructor public static class Item { private List<String> statementIds;
private List<String> voucherIds; }}
/** * 从bankResults获取Item中包含statementId的voucherIds. */ private Set<String> getVoucherIds( final String statementId, final List<BankResult> bankResults) { return bankResults.stream().map( bankResult -> { Set<String> detailIds = bankResult.getItems().stream() .filter( item -> item.getStatementIds().stream().anyMatch( s -> s.equals(statementId) ) ) .map(BankResult.Item::getVoucherIds) .collect(HashSet::new, HashSet::addAll, HashSet::addAll); return detailIds; } ).collect(HashSet::new, HashSet::addAll, HashSet::addAll); }
复制代码


Share

Java 运算符实际运用

https://xie.infoq.cn/article/33d6a59aaddb15b0b3bba3088


发布于: 2020 年 05 月 29 日阅读数: 66
用户头像

凌轩

关注

摸鱼不成,默默搬砖 2018.09.26 加入

还未添加个人简介

评论

发布
暂无评论
ARTS_20200529