Best Time to Buy and Sell Stock

2016-11-22  本文已影响0人  yangqi916

1. 题目分析

最终 Local[i][j] = max{ Global[i-1][j-1] + max{ 0 , a[i] - a[i-1] }, Local[i-1][j] + a[i] - a[i-1] }

2. 实现

//
//  main.cpp
//  leetcode
//
//  Created by YangKi on 15/11/19.
//  Copyright © 2015年 YangKi. All rights reserved.
#include<vector>
#include<algorithm>
#include<cstdio>
#include <unordered_map>
#include <cmath>
using namespace std;

struct node
{
    int G;
    int L;
};

int getMax(int a, int b)
{
    if (a > b) return a;
    else return b;
}

class Solution {
public:
    int maxProfit2(vector<int>& prices) {
        if (prices.size() < 2)
        {
            return 0;
        }
        
        int size = (int)prices.size();
        int sum = 0;
        for (int i = 0; (i + 1) <= (size - 1); i++)
        {
            if (prices[i+1] - prices[i] > 0)
            {
                sum += (prices[i+1] - prices[i]);
            }
        }
        
        return sum;
    }
    
    int maxProfit(int k, vector<int>& prices){
        int size = (int)prices.size();
        
        if (size == 0 || size == 1)
        {
            return 0;
        }
        
       //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        if (k >= size)
        {
            return maxProfit2(prices);
        }
         //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        node matrix[size][k+1];
        
        for (int i = 0; i< k+1; i++)
        {
            (matrix[0][i]).G = 0;
            (matrix[0][i]).L = 0;
        }
        
        for (int i = 0; i< size; i++)
        {
            (matrix[i][0]).G = 0;
            (matrix[i][0]).L = 0;
        }
        
        for (int i = 1; i < size; i++)
        {
            for (int j = 1; j < k+1; j++)
            {
                (matrix[i][j]).L = getMax((matrix[i-1][j-1]).G + getMax(0, prices[i] - prices[i-1]), (matrix[i-1][j]).L + prices[i] - prices[i-1]);
                
                (matrix[i][j]).G = getMax((matrix[i][j]).L, (matrix[i-1][j]).G);
            }
        }
        
        return (matrix[size - 1][k]).G;
    }
};

int main()
{
    
    
    Solution *s= new Solution();
    vector<int> v={1,0,1,1};
    
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读