Best Time to Buy and Sell Stock

Total Accepted: 14044 Total
Submissions: 45572My Submissions

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.

Have you been asked this question in an interview?

解题思路:

贪心法:

分别找到价格最低和最高的一天,低进高出,注意最低的一天要在最高的一天之前。

把原始价格序列变成差分序列,也就是对于元素j,在该点卖出的价格等于prices[j] 减去它前面元素中最小的值。这样遍历一遍数组就OK了。

本题也能够做是最大m 子段和,m = 1 。

动态规划法:

首先用prices[i] - prices[i-1] 将数组转化为 差分序列,那么问题就转化为在这个差分序列中找出一个最大( maximum )的连续的子序列和的问题,能够用LeetCode--Maximum Subarray 最大连续子序列和 (动态规划)类似方法求解。

备注:若採用暴利破解法,时间复杂度是O(n^2),会超出时间限制。

程序源码:

贪心算法Java代码

	public int maxProfit(int[] prices) {
if(prices.length ==0)
return 0;
int i=0;
int profit=0;
int begMin= prices[0];
for(i=1; i<prices.length; ++i){
profit=Math.max(profit, prices[i]-begMin);
begMin=Math.min(begMin, prices[i]);
}
return profit;
}

动态规划:java代码

    public int maxProfit(int[] prices) {
int profit=0;
int temp=0;
for(int i=1; i<prices.length; ++i){
int diff=prices[i] - prices[i-1];
temp=Math.max(temp+diff, diff);
profit=Math.max(profit, temp);
}
return profit;
}

暴利破解法:

	/**
* 暴利枚举法,超出时间限制
* @param prices
* @return
*/
public static int maxProfit2(int[] prices) {
int profit= 0;
for( int i=0; i<prices.length-1; ++i){
for (int j=i+1; j<prices.length; ++j){
profit = Math.max(prices[j]-prices[i], profit);
}
}
return profit;
}

附录:

相关题目:

LeetCode -- Best Time to Buy and Sell Stock II (贪心策略,差分序列)

LeetCode--Best Time to Buy and Sell Stock III (动态规划)

LeetCode--Best Time to Buy and Sell Stock (贪心策略 or 动态规划)的更多相关文章

  1. LeetCode:Best Time to Buy and Sell Stock I II III

    LeetCode:Best Time to Buy and Sell Stock Say you have an array for which the ith element is the pric ...

  2. [LeetCode] Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期

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

  3. [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四

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

  4. [LeetCode] Best Time to Buy and Sell Stock III 买股票的最佳时间之三

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

  5. [LeetCode] Best Time to Buy and Sell Stock II 买股票的最佳时间之二

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

  6. [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间

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

  7. LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]

    Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...

  8. LeetCode Best Time to Buy and Sell Stock IV

    原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/ 题目: Say you have an array ...

  9. [LeetCode] Best Time to Buy and Sell Stock with Transaction Fee 买股票的最佳时间含交易费

    Your are given an array of integers prices, for which the i-th element is the price of a given stock ...

随机推荐

  1. QT窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透

    qt 窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透 窗口置顶qt 里是 setWindowFlags(Qt::WindowStaysOnTopHint)kde 里 ...

  2. zookeeper perl 版本需求

    [root@wx03 ~]# perl -v This is perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-linux Cop ...

  3. socket通信技术介绍

    [-] 网络中进程之间怎样通信 什么是Socket socket一词的起源 socket的基本操作 socket函数 bind函数 网络字节序与主机字节序 listenconnect函数 accept ...

  4. 用tomcat搭建web服务器

    链接地址:http://www.blogjava.net/qingshow/archive/2010/01/17/309846.html qingshow “不积跬步无以至千里,不积小流无以成江海”. ...

  5. git教程1

    主要参考: 官方书籍: Pro Git 中文版:http://git.perlchina.org/book/zh 英文版:http://git.perlchina.org/book http://gi ...

  6. OGR API Tutorial

    This document is intended to document using the OGR C++ classes to read and write data from a file. ...

  7. ActiveMQ消息队列介绍(转)

    ActiveMQ是一个开源兼容Java Message Service (JMS) 1.1面向消息的中件间. 来自Apache Software Foundation. ActiveMQ提供松耦合的应 ...

  8. 基于visual Studio2013解决面试题之0808寻找中间数

     题目

  9. CF 319D(Have You Ever Heard About the Word?-模拟)

    D. Have You Ever Heard About the Word? time limit per test 6 seconds memory limit per test 256 megab ...

  10. semaphore实现浏览器的读写原理

    在编程范式中的斯坦福大学的老师说了一个例子:好比世界上就只有一台互联网的服务器,当我们浏览网页的时候,就好比服务器进行了写操作,而浏览器则进行了读操作. 我如果用简单的伪代码c++写出来是这个样子的: ...