zoukankan      html  css  js  c++  java
  • [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 algorithm to find the maximum profit. You may complete at most two transactions.

    Note:
    You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

    给定一个数组,第i个元素代表股票在第i天的价格,限定最多交易两次,求最大收益。

    由于两次交易不能重叠,可以把数组切分成两部分,分别计算第一次交易能够获取的最大利益,和第二次交易能够获取的最大利益,然后把它们相加。

    计算第二次的时候,可以从后往前计算,并保存最高卖出价,可以简化计算。

    代码如下:

     1 class Solution {
     2 public:
     3     int maxProfit(vector<int> &prices) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         int profit = 0, n = prices.size();
     7         if (n == 0) {
     8             return 0;
     9         }
    10         int l[n], r[n];
    11         l[0] = 0;
    12         r[n-1] = 0;
    13         int minp = prices[0];
    14         for (int i = 1; i < n; i++) {
    15             l[i] = max(prices[i] - minp , l[i - 1]);        
    16             minp = min(prices[i] , minp);
    17         }
    18         int maxp = prices[n - 1];
    19         for (int i = n - 2; i >= 0; i--) {
    20             r[i] = max(maxp - prices[i] , r[i + 1]);
    21             maxp = max(prices[i] , maxp);
    22         }
    23         for (int i = 0; i < n; i++) {
    24             profit = max(l[i] + r[i] , profit);
    25         }
    26         return profit;      
    27     }
    28 };

    在这道题中,发现g++中在栈里面开辟数组居然可以不用限定编译时必须确定数组的值,也就是说下面的代码是合法的。

     1 #include <iostream>
     2 using namespace std;
     3 int main(int argc, char *argv[])
     4 {
     5     int n;
     6     cin >> n;
     7     int a[n];
     8     for( int i = 0 ; i < n ; i++ )
     9     {
    10         a[i] = i;
    11         cout<<a[i];
    12     }
    13 }

    原来C99标准对数组进行了加强:

    C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可变长数组,但是只有局部数组才可以是变长的。可变长数组的维数在数组生存期内是不变的,也就是说,可变长数组不是动态的。可以变化的只是数组的大小。可以使用*来定义不确定长的可变长数组。

         

  • 相关阅读:
    css中margin-left与left的区别
    Python文件和目录模块介绍:glob、shutil、ConfigParser
    [ Python入门教程 ] Python文件基本操作_os模块
    使用Pyinstaller转换.py文件为.exe可执行程序
    Windows命令行打开常用界面
    如何做好性能测试_流程篇
    Windows查看指定端口是否占用和查看进程
    ‘操作无法完成 ,因为其中的文件夹或文件已在另一程序中打开’问题解决
    bat脚本基础教程
    vi编辑器常用命令
  • 原文地址:https://www.cnblogs.com/jostree/p/3705122.html
Copyright © 2011-2022 走看看