1. 程式人生 > >leetcode 901. 股票價格跨度

leetcode 901. 股票價格跨度

編寫一個 StockSpanner 類,它收集某些股票的每日報價,並返回該股票當日價格的跨度。

今天股票價格的跨度被定義為股票價格小於或等於今天價格的最大連續日數(從今天開始往回數,包括今天)。

例如,如果未來7天股票的價格是 [100, 80, 60, 70, 60, 75, 85],那麼股票跨度將是 [1, 1, 1, 2, 1, 4, 6]。  

輸入:

["StockSpanner","next","next","next","next","next","next","next"]
[[],[100],[80],[60],[70],[60],[75],[85]]

輸出:

[null,1,1,1,2,1,4,6] 

看到題目的第一直覺就是棧,一開始抓不住規律。

其實我們每次next找的都是在新元素左邊的比新元素大的最後一個數,因此維護一個遞減的棧,棧裡存數字和數字的下標,每次和棧頂比較, 如果小於的話,那麼以這個下標為準,後面的數字都比新元素小。而如果新元素大於棧頂數字,就一直出棧,直到棧頂元素大於新元素。

class StockSpanner {
    private ArrayList<Integer> list;
    private Stack<int[]> num;
    
    public StockSpanner() {
        list = new ArrayList<Integer>();
        num = new Stack<int[]>();
    }
    
    public int next(int price) {
        while(!num.isEmpty() && num.peek()[0] <= price){
            num.pop(); 
        } 
        int res = 1;
        if(num.isEmpty()){
            res =  list.size() + 1;
        }
        else
            res =  list.size() - num.peek()[1];
        list.add(price);
        num.push(new int[]{price,list.size() - 1});
        return res;
    }
}

/**
 * Your StockSpanner object will be instantiated and called as such:
 * StockSpanner obj = new StockSpanner();
 * int param_1 = obj.next(price);
 */

相關推薦

leetcode 901. 股票價格跨度

編寫一個 StockSpanner 類,它收集某些股票的每日報價,並返回該股票當日價格的跨度。 今天股票價格的跨度被定義為股票價格小於或等於今天價格的最大連續日數(從今天開始往回數,包括今天)。 例如,如果未來7天股票的價格是 [100, 80, 60, 70, 60,

901. 股票價格跨度

編寫一個 StockSpanner 類,它收集某些股票的每日報價,並返回該股票當日價格的跨度。 今天股票價格的跨度被定義為股票價格小於或等於今天價格的最大連續日數(從今天開始往回數,包括今天)。

hiho 1604 - 股票價格,思維題

namespace 價格 algorithm nbsp set 關註 i++ ref -- 題目鏈接 題目大意 小Hi最近在關註股票,為了計算股票可能的盈利,他獲取了一只股票最近N天的價格A1~AN。 在小Hi的策略中,每天可以在下列三種操作中選取一種: 1.什麽也不做;

返回股票價格變化程度top k的股票

iter queue more ood rgs args har request blocking 第二題:有一個數據流持續的讀入以下數據:stock,price. 每天早上都是從empty開始讀入數據設計一個application,能始終返回股票價格變化程度top k的股

NumPy學習筆記 三 股票價格

... average col color adt 數據分析 enter 圖片 數理統計 NumPy學習筆記 三 股票價格 《NumPy學習筆記》系列將記錄學習NumPy過程中的動手筆記,前期的參考書是《Python數據分析基礎教程 NumPy學習指南》第二版、《數學分析》

leetcode 買賣股票問題

etc urn leet max leetcode cto stock for public leetcode121 Best Time to Buy and Sell Stock 說白了找到最大的兩組數之差即可 1 class Solution { 2 public

Leetcode - 買賣股票的最佳時機 III

https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/submissions/ 題目描述 給定一個數組,它的第 i 個元素是一支給定的股票在第 i 天的價格。

Leetcode - 買賣股票的最佳時機

https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 題目描述 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多隻允許完成一筆交易(即買入

[LeetCode]買賣股票的最佳時機 II

買賣股票的最佳時機 II 假設有一個數組,它的第 i 個元素是一個給定的股票在第 i 天的價格。 設計一個演算法來找到最大的利潤。你可以完成儘可能多的交易(多次買賣股票)。然而,你不能同時參與多個交易(你必須在再次購買前出售股票)。 注意:可以多次購買,購買前先賣出

Leetcode 買賣股票的最佳時機 II(c++)

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 示例 1: 輸入: [7,1,5,3,6,

LeetCode買賣股票的最佳時機 II

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 示例 1: 輸入: [7,1,5,

python用線性迴歸預測股票價格

線性迴歸在整個財務中廣泛應用於眾多應用程式中。在之前的教程中,我們使用普通最小二乘法(OLS)計算了公司的beta與相對索引的比較。現在,我們將使用線性迴歸來估計股票價格。 線性迴歸是一種用於模擬因變數(y)和自變數(x)之間關係的方法。通過簡單的線性迴歸,只有一個自變數x

呼叫sina財經api獲取實時股票價格

import tushare as ts import requests import time start = time.time() #呼叫新浪api content=requests.get('http://hq.sinajs.cn/?format=json&list=sh60

leetCode 買賣股票的最佳時機 II

題目描述: 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 示例 1: 輸入:

Leetcode 買賣股票的最佳時機 II 貪心

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。 示例 1: 輸入: [7,1,5,3,

LeetCode—買賣股票的最好時機

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

【資料結構筆記】Leetcode買賣股票的最佳時機 系列總結

121.買賣股票的最佳時機 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。 注意你不能在買入股票前賣出股票。 示例 1: 輸入: [7

LeetCode-買賣股票的最佳時機 II

1.假設有一個數組,它的第i個元素是一支給定的股票在第i天的價格。如果你最多隻允許完成一次交易(例如,一次買賣股票),設計一個演算法來找出最大利潤。樣例:給出一個數組樣例 [3,2,3,1,2], 返回 1思路:遍歷陣列,在能獲利的地方嘗試賣出,並比較賣出利潤是否最大。在成本

LeetCode 買賣股票的合適時間

最近在看貪心演算法及相關內容,找出了leetcode相關的專題來做,碰到了買賣股票的一系列問題,故記錄以備之。 一、入門一級:只能買賣一次股票,求最大利潤 Title: Best Time to Buy and Sell Stock Say yo

LeetCode 買賣股票的最佳時機

這是一道再水不過的題 我的解決方案: class Solution { public int maxProfit(int[] prices) { if(prices.