zoukankan      html  css  js  c++  java
  • Best Time to Buy and Sell Stock i

    Say you have an array for which the ith element is the price of a given stock on day i.

    If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

    Example 1:

    Input: [7, 1, 5, 3, 6, 4]
    Output: 5
    
    max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
    

    Example 2:

    Input: [7, 6, 4, 3, 1]
    Output: 0
    
    In this case, no transaction is done, i.e. max profit = 0

    只允许一次交易,算出最大利益。利益是卖的价格减去买的价格,卖在买后面。

    这个题目的变形出现过:一个数组,0<=a<b<=n。。。a,b是数组的两个下标,b在后面。求num[b]-num[a]的最大值。跟这个题是一个意思。

    依次遍历数组,每个元素跟它前面的最小值做差,会使得此元素的差值最大,然后找出最大差值就行。见代码。

    class Solution {
        public int maxProfit(int[] prices) {
            if(prices==null||prices.length<2) return 0;
            int maxProfit=0;
            int min=prices[0];
            for(int i=1;i<prices.length;i++){
                if(prices[i]-min>maxProfit)
                    maxProfit=prices[i]-min;
                if(min>prices[i])//找出当前元素前面的最小值,在一次遍历的时候就可以找出来了
                    min=prices[i];
            }
            
            return maxProfit;
        }
    }
    
    
  • 相关阅读:
    Conversions
    Mispelling4
    A hard puzzle
    Easier Done Than Said?
    利用map可以对很大的数出现的次数进行记数
    A+B Coming
    结构体成员变量
    NSString 类介绍及用法
    复习回顾
    函数与方法对比
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8081371.html
Copyright © 2011-2022 走看看