最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?C++?算法題解leetcode145商品折扣后最終價(jià)格單調(diào)棧

 更新時(shí)間:2022年09月14日 10:11:06   作者:AnjaVon  
這篇文章主要介紹了Java?C++?算法題解leetcode145商品折扣后最終價(jià)格單調(diào)棧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

題目要求

思路一:暴力模擬

  • 由于數(shù)據(jù)范圍不算離譜,所以直接遍歷解決可行。

Java

class Solution {
    public int[] finalPrices(int[] prices) {
        int n = prices.length;
        int[] res = new int[n];
        for (int i = 0; i < n; i++) {
            int discount = 0;
            for (int j = i + 1; j < n && discount == 0; j++) {
                if (prices[j] <= prices[i])
                    discount = prices[j];
            }                
            res[i] = prices[i] - discount;
        }
        return res;
    }
}
  • 時(shí)間復(fù)雜度:O(n^2)
  • 空間復(fù)雜度:O(n)

C++

class Solution {
public:
    vector<int> finalPrices(vector<int>& prices) {
        int n = prices.size();
        vector<int> res(n);
        for (int i = 0; i < n; i++) {
            int discount = 0;
            for (int j = i + 1; j < n && discount == 0; j++) {
                if (prices[j] <= prices[i])
                    discount = prices[j];
            }
            res[i] = prices[i] - discount;
        }
        return res;
    }
};
  • 時(shí)間復(fù)雜度:O(n^2)
  • 空間復(fù)雜度:O(n)

Rust

impl Solution {
    pub fn final_prices(prices: Vec<i32>) -> Vec<i32> {
        let n = prices.len();
        let mut res = vec![0;n];
        (0..n).for_each(|i| {
            res[i] = prices[i] - ((i + 1)..n).find(|&j| prices[j] <= prices[i]).map_or(0, |j| prices[j]);
        });
        res
    }
}
  • 遍歷存每次的count,最后再遍歷計(jì)算得出結(jié)果
impl Solution {
    pub fn final_prices(prices: Vec<i32>) -> Vec<i32> {
        let n = prices.len();
        let mut discount = vec![0;n];
        for j in 1..n {
            for i in 0..j {
                if discount[i] == 0 && prices[j] <= prices[i] {
                    discount[i] = prices[j];
                }
            }
        }
        prices.iter().zip(discount.iter()).map(|(&x, &y)| x - y).collect::<Vec<i32>>()
    }
}
  • 時(shí)間復(fù)雜度:O(n^2)
  • 空間復(fù)雜度:O(n)

思路二:單調(diào)棧

  • 是個(gè)逆向思維,不考慮誰是我的折扣,而去考慮我可以是誰的折扣。已知的一個(gè)prices[j]只能折扣其左邊最近的幾個(gè)大于它的值,按這個(gè)思路分析單調(diào)
    • 從前向后依次遍歷prices,遇到需要打折的商品,將其下標(biāo)放入一個(gè)容器
      • 若當(dāng)前處理值小于末尾,那么它就可以作為末尾元素的折扣【因?yàn)樗悄┪苍睾竺?strong>第一個(gè)小于它的值】,將末尾元素取出、折扣、放入已折扣數(shù)組(即結(jié)果數(shù)組),一直重復(fù)到容器末尾元素小于當(dāng)前處理值,則將當(dāng)前處理值放入容器【為避免該值不可打折造成缺漏,此時(shí)將其價(jià)格同步至已折扣數(shù)組】。
      • 若當(dāng)前處理的值高于容器內(nèi)的值,那么它不能作為里面任何一者的折扣,因此直接加入容器。
    • 由此可知,加入容器值會大于容器內(nèi)的其它值,該容器是單調(diào)遞增的。此外,處理的一直是容器末尾的元素,添加也是直接補(bǔ)在末尾,所以符合的結(jié)構(gòu)。

Java

class Solution {
    public int[] finalPrices(int[] prices) {
        int n = prices.length;
        int[] res = new int[n]; // 已打折價(jià)格
        Deque<Integer> sta = new ArrayDeque<>(); // 待打折下標(biāo)
        for (int i = 0; i < n; i++) {
            while (!sta.isEmpty() && prices[sta.peekLast()] >= prices[i]) {
                int idx = sta.pollLast();
                res[idx] = prices[idx] - prices[i];
            }
            sta.addLast(i); // 最高
            res[i] = prices[i];
        }
        return res;
    }
}
  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n)

C++

class Solution {
public:
    vector<int> finalPrices(vector<int>& prices) {
        int n = prices.size();
        vector<int> res(n); // 已打折價(jià)格
        stack<int> sta; // 待打折下標(biāo)
        for (int i = 0; i < n; i++) {
            while (!sta.empty() && prices[sta.top()] >= prices[i]) {
                int idx = sta.top();
                sta.pop();
                res[idx] = prices[idx] - prices[i];
            }
            sta.push(i); // 最高
            res[i] = prices[i];
        }
        return res;
    }
};
  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n)

Rust

impl Solution {
    pub fn final_prices(prices: Vec<i32>) -> Vec<i32> {
        let n = prices.len();
        let mut res = vec![0;n]; // 已打折價(jià)格
        let mut sta = vec![]; // 待打折下標(biāo)
        for i in 0..n {
            while let Some(&idx) = sta.last() {
                if prices[idx] < prices[i] {
                    break;
                }
                sta.pop();
                res[idx] = prices[idx] - prices[i];
            }
            sta.push(i); // 最高
            res[i] = prices[i];
        }
        res
    }
}
  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n)

以上就是Java C++ 算法題解leetcode145商品折扣后最終價(jià)格單調(diào)棧的詳細(xì)內(nèi)容,更多關(guān)于Java C++ 商品折扣后價(jià)格的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++詳細(xì)講解內(nèi)存管理工具primitives

    C++詳細(xì)講解內(nèi)存管理工具primitives

    文章向大家介紹C++內(nèi)存管理primitives,主要包括primitives使用實(shí)例、應(yīng)用技巧、基本知識點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06
  • 詳解C++類的成員函數(shù)做友元產(chǎn)生的循環(huán)依賴問題

    詳解C++類的成員函數(shù)做友元產(chǎn)生的循環(huán)依賴問題

    這篇文章主要為大家詳細(xì)介紹了C++類的成員函數(shù)做友元產(chǎn)生的循環(huán)依賴問題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 從頭學(xué)習(xí)C語言之二維數(shù)組

    從頭學(xué)習(xí)C語言之二維數(shù)組

    這篇文章主要為大家詳細(xì)介紹了C語言之二維數(shù)組,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 求數(shù)組中最長遞增子序列的解決方法

    求數(shù)組中最長遞增子序列的解決方法

    本篇文章是對c++中求數(shù)組中最長遞增子序列的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Opencv實(shí)現(xiàn)拼圖板游戲

    Opencv實(shí)現(xiàn)拼圖板游戲

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)拼圖板小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • c/c++單例模式類的混合編譯案例詳解

    c/c++單例模式類的混合編譯案例詳解

    ? 由于c語言中沒有類的概念,因此對于有類的cpp文件與c文件混合編譯時(shí),提供一個(gè)中間層提供類的操作接口,在c文件中調(diào)用接口實(shí)現(xiàn)間接操作類對象,這篇文章主要介紹了c/c++單例模式類的混合編譯的相關(guān)資料
    2022-10-10
  • 淺理解C++ 人臉識別系統(tǒng)的實(shí)現(xiàn)

    淺理解C++ 人臉識別系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了淺理解C++ 人臉識別系統(tǒng)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C語言中打印特殊圖案的實(shí)現(xiàn)代碼

    C語言中打印特殊圖案的實(shí)現(xiàn)代碼

    以下代碼實(shí)現(xiàn)了在C語言中打印特殊圖案的解決方法。需要的朋友參考下
    2013-05-05
  • C語言/C++中如何產(chǎn)生隨機(jī)數(shù)

    C語言/C++中如何產(chǎn)生隨機(jī)數(shù)

    這里要用到的是rand()函數(shù), srand()函數(shù),和time()函數(shù)。需要說明的是,iostream頭文件中就有srand函數(shù)的定義,不需要再額外引入stdlib.h;而使用time()函數(shù)需要引入ctime頭文件
    2013-10-10
  • c語言數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解(Stack&Queue)

    c語言數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解(Stack&Queue)

    這篇文章主要介紹了c語言數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解(Stack&Queue),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08

最新評論

嘉义市| 瓮安县| 宿松县| 绥芬河市| 驻马店市| 桑植县| 天全县| 肃宁县| 拜泉县| 吴桥县| 桃园市| 平阳县| 江孜县| 三都| 通渭县| 恩平市| 浮山县| 岫岩| 普陀区| 济阳县| 奉贤区| 即墨市| 霍林郭勒市| 托克托县| 镇平县| 长丰县| 台江县| 靖远县| 凤山市| 南乐县| 辽宁省| 荥经县| 定兴县| 印江| 新密市| 呼图壁县| 洛南县| 昌平区| 高青县| 丹阳市| 县级市|