• 【嘎】数组-买卖股票的最佳时机


    我又来拉低通过率了。。。

     题目:

    给定一个数组,它的第 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。

    解答1: 暴力法

     1 class Solution {
     2     public int maxProfit(int[] prices) {
     3             if (prices == null || prices.length < 1) {
     4                 return 0;
     5             }
     6             HashMap hm = new HashMap();
     7             hm.put("i", 0);
     8             hm.put("j", 0);
     9             int difference = 0;
    10             for (int i = 0;i < prices.length - 1; i++) {
    11                 for (int j = i+1; j < prices.length; j++) {
    12                     if (prices[j] > prices[i]) {
    13                         int diff = prices[j] - prices[i];
    14                         if (diff > difference) {
    15                             difference = diff;
    16                             hm.put("i", i);
    17                             hm.put("j", j);
    18                         }
    19                     }
    20                 }
    21             }
    22 //            return Integer.parseInt(hm.get("j")+ "") - Integer.parseInt(hm.get("i")+ "");
    23             return prices[Integer.parseInt(hm.get("j")+ "")] - prices[Integer.parseInt(hm.get("i")+ "")];
    24         }
    25 }

    一激动以为成功了就提交了,测试的时候也没注意,以为没报错就是对的了。

    看完官方的第一个解答,我发现返回的只要是差值,这不就是我的diffenence嘛,emmm

    改成下面这样之后,也没有很快:

    class Solution {
        public int maxProfit(int[] prices) {
                if (prices == null || prices.length < 1) {
                    return 0;
                }
                int difference = 0;
                for (int i = 0;i < prices.length - 1; i++) {
                    for (int j = i+1; j < prices.length; j++) {
                        if (prices[j] > prices[i]) {
                            int diff = prices[j] - prices[i];
                            if (diff > difference) {
                                difference = diff;
                            }
                        }
                    }
                }
                return difference;
            }
    }

     

     解答2:一次遍历

    利用找到最低点,自己没想到,一开始还在怀疑这种写法。。。

        public int maxProfit(int[] prices) {
                int minprice = Integer.MAX_VALUE; // 记录最小点
                int maxdiff = 0;
                for (int i = 0; i < prices.length; i++) {
                    if (prices[i] < minprice) {
                        minprice = prices[i];
                    } else {
                        maxdiff = prices[i] - minprice > maxdiff ? prices[i] - minprice:maxdiff ;
                    }
                }
                return maxdiff;
            }

     官方:

    public class Solution {
        public int maxProfit(int prices[]) {
            int minprice = Integer.MAX_VALUE;
            int maxprofit = 0;
            for (int i = 0; i < prices.length; i++) {
                if (prices[i] < minprice)
                    minprice = prices[i];
                else if (prices[i] - minprice > maxprofit)
                    maxprofit = prices[i] - minprice;
            }
            return maxprofit;
        }
    }

     

    越努力越幸运~ 加油ヾ(◍°∇°◍)ノ゙
  • 相关阅读:
    Oracle Instance
    第03章-VTK系统概述(1)
    二叉查找树BST----java实现
    [Golang] 从零開始写Socket Server(2): 自己定义通讯协议
    linux之SQL语句简明教程---LIKE
    spring mvc 入门示例
    MyBatis与Spring集成
    MyBatis 一对一关联查询
    MyBatis CRUD Java POJO操作
    eclipse xml自动提示
  • 原文地址:https://www.cnblogs.com/utomboy/p/12446935.html
Copyright © 2020-2023  润新知