1. 程式人生 > >筆試演算法題--股票買賣問題(兩次買賣)

筆試演算法題--股票買賣問題(兩次買賣)

題目:一個人一天只能進行最多兩次買和兩次賣,並且只有賣了才能繼續買。問一天可以獲得的最大收益,要採用時間複雜度低的實現。

股票價格為:10,22,5,75,65,80.答案:87(10買,22賣,5買,80賣)

動態規劃解決方法:設定陣列dp[i][j]表示:prices[i]買入到prices[j]賣出的收益。則得出dp[i][j]為

0 12 -5 65 55 70  
0 0 -17 53 43 58  
0 0 0 70 60 75  
0 0 0 0 -10 5  
0 0 0 0 0 15  
0 0 0 0 0 0 

然後:先找出最大值的位置和買入賣出的時間,題中是75最大,買入i=2,賣出j=5

然後根據買入賣出的時間,算出除此之外時間段的最大值

程式碼如下:

public static int maxProfit(int[] prices, int length) {
		int res = 0;
		int dp[][] = new int[length][length];
		for (int i = 0; i < length - 1; i++) {			
			for (int j = i + 1; j < length; j++) {
				dp[i][j] = prices[j] - prices[i];
				System.out.print(dp[i][j] + " ");
			}
			
		}

		int max = 0;
		int ma2 = 0;
		int start = 0;
		int end = 0;
		for (int i = 0; i < length; i++)
			for (int j = i + 1; j < length; j++) {
				if (dp[i][j] > max) {
					max = dp[i][j];
					start = i;
					end = j;
				}
			}
		System.out.println(start + " " + end + " " + max);
		for (int i = 0; i < start; i++)
			for (int j = i + 1; j < start; j++) {
				if (dp[i][j] > ma2) {
					ma2 = dp[i][j];

				}
			}

		if (end < length - 1)
			for (int i = end + 1; i < length; i++) {
				for (int j = i + 1; j < length; j++) {
					if (dp[i][j] > ma2) {
						ma2 = dp[i][j];

					}
				}
			}
		res = max + ma2;
		return res;
	}


相關推薦

筆試演算法--股票買賣問題買賣

題目:一個人一天只能進行最多兩次買和兩次賣,並且只有賣了才能繼續買。問一天可以獲得的最大收益,要採用時間複雜度低的實現。 股票價格為:10,22,5,75,65,80.答案:87(10買,22賣,5買,80賣) 動態規劃解決方法:設定陣列dp[i][j]表示:prices[

每日一--LeetCode 2數相加java

題目描述: 程式碼如下: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x)

51Nod 1095 Anigram單詞 map

一個單詞a如果通過交換單詞中字母的順序可以得到另外的單詞b,那麼定義b是a的Anigram,例如單詞army和mary互為Anigram。另:相同的2個單詞不算Anigram。現在給定一個字典,輸入Q個單詞,從給出的字典中找出這些單詞的Anigram。 收起 輸入 第1行:1個數N,表示

1111 Online Map 30 分dij

1111 Online Map (30 分) Input our current position and a destination, an online map can recommend several paths. Now your job is to recommend two pat

Silver Cow PartyDijstra

Silver Cow Party One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1…N is going to attend the big cow party to be held at farm #

UVA11624 Fire! BFS 讀懂題意很重要

題目:https://uva.onlinejudge.org/index.phpoption=com_onlinejudge&Itemid=8&page=show_problem&problem=2671題意:就是迷宮著火了,火勢會蔓延,Joe要逃跑,

LeetCode演算法-Longest Palindrome五種解法

這是悅樂書的第220次更新,第232篇原創 01 看題和準備 今天介紹的是LeetCode演算法題中Easy級別的第87題(順位題號是409)。給定一個由小寫或大寫字母組成的字串,找到可以用這些字母構建的最長的迴文長度。這是區分大小寫的,例如“Aa”在這裡不被視為迴文。例如: 輸入:“abccccdd

傳輸中文的亂碼的原因及解決方式encodeURI()轉碼;

.encodeURL函式主要是來對URI來做轉碼,它預設是採用的UTF-8的編碼. . UTF-8編碼的格式:一個漢字來三個位元組構成,每一個位元組會轉換成16進位制的編碼,同時新增上%號. 假設頁面端輸入的中文是一個 “中”,按照下面步驟進行解碼 1.第

基礎練習 2n皇后問題 DFS

問題描述   給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少种放法?n小於等於8。 輸入格式   輸入的第一行為一個整數n,表示棋盤

uva 11624 大火蔓延的迷宮 Fire!bfs

 題目:一個平面迷宮中有一個人,迷宮中有些點起火了,火和人每個單位時間只能向相鄰的格子移動,             其中有一些空間被牆壁佔據,問這個人在不背或燒到的情況下,離開迷宮的最快時間。 思路是先用bfs預處理每個格子起火的時間,在來一次bfs走迷宮,入隊時判斷

藍橋杯 PREV-9 大臣的旅費 DFS

題意:求樹中最遠的兩個點的距離。 解題方案:第一遍dfs,任取一個點,找到離它最遠的點a,第二遍dfs,以a為起點,找到離a最遠的點b,ab即為樹中最遠的兩個點。證明:樹的直徑(最長路)的詳細證明。

藍橋杯之大臣的旅費dfs

之間 NPU fin ble 過大 編號 http sample 題目 Description 很久以前,T王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連接首都和王國內的各大城市。 為節省經費,T國的大臣們經過思考,制定了一套優秀的修建方案,使得任

通過機器學習的線性迴歸演算法預測股票走勢用Python實現

    在本人的新書裡,將通過股票案例講述Python知識點,讓大家在學習Python的同時還能掌握相關的股票知識,所謂一舉兩得。這裡給出以線性迴歸演算法預測股票的案例,以此講述通過Python的sklearn庫實現線性迴歸預測的技巧。     本文先講以波士頓房價資

Best Time to Buy and Sell Stock III 最佳時間買入賣出股票最多買賣@LeetCode

轉載:https://blog.csdn.net/fightforyourdream/article/details/14503469 題目: 最佳時間買入賣出股票:你有一個數組儲存了股票在第i天的價錢,現在你最多進行兩次買賣,但同一時間你手上只能保持一個股票,如何賺的最多 思路:

Best Time to Buy and Sell Stock III 買賣股票的最佳時機 重重重

題目: 只能買賣兩次,而且最大手裡只有一隻股票。求最大利潤。 解答: 參考: 程式碼: /* 解釋: 首先,因為能買2次(第一次的賣可以和第二次的買在同一時間),但第二次的買不能在第一次的賣左邊。 所以維護2個表,f1和f2,size都和prices一

美團點評2016研發題目-[程式設計-美團] 股票交易日(買賣)

[程式設計題] 股票交易日 時間限制:3秒 空間限制:32768K 在股市的交易日中,假設最多可進行兩次買賣(即買和賣的次數均小於等於2),規則是必須一筆成交後進行另一筆(即買-賣-買-賣的順

城市建設kruscal演算法

棟棟居住在一個繁華的C市中,然而,這個城市的道路大都年久失修。市長準備重新修一些路以方便市民,於是找到了棟棟,希望棟棟能幫助他。  C市中有n個比較重要的地點,市長希望這些地點重點被考慮。現在可以修一些道路來連線其中的一些地點,每條道路可以連線其中的兩個地點。另外由於C市有一條河從中穿過,

商湯科技筆試演算法手寫卷積

#include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int M, N; int t

Leetcode 123 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. 假設你有一個數組,裡面記錄的是每一天的股票的價格。 Desig

Best Time to Buy and Sell Stock II 最佳時間買入賣出股票買賣@LeetCode

題目:最佳時間買入賣出股票:你有一個數組儲存了股票在第i天的價錢,現在你可以進行多次買入賣出,但同一時間你手上只能保持一個股票,如何賺的最多思路:貪心法,本題和前面的Best Time to Buy and Sell Stock 不同在於,本題可以多次買賣股票,從而累積賺取所