筆試演算法題--股票買賣問題(兩次買賣)
題目:一個人一天只能進行最多兩次買和兩次賣,並且只有賣了才能繼續買。問一天可以獲得的最大收益,要採用時間複雜度低的實現。
股票價格為: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 Party(兩次Dijstra)
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 不同在於,本題可以多次買賣股票,從而累積賺取所