日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通俗易懂:贪心算法(三):习题练习 (力扣605种花问题、122买卖股票的最佳时机)

發(fā)布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通俗易懂:贪心算法(三):习题练习 (力扣605种花问题、122买卖股票的最佳时机) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

看完本文,可以順便解決leetcode以下兩個題目:

605.種花問題🌷(簡單)
122.買賣股票的最佳時機Ⅱ💳(簡單)

605.種花問題(簡單)

題目描述

假設有一個很長的花壇🌷,一部分地塊種植了花,另一部分卻沒有。可是,花不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。
給你一個整數(shù)數(shù)組 flowerbed 表示花壇,由若干 0 和 1 組成,其中 0 表示沒種植花,1 表示種植了花。另有一個數(shù) n ,能否在不打破種植規(guī)則的情況下種入 n 朵花?🌹能則返回 true ,不能則返回 false。

輸入輸出樣例

輸入:flowerbed = [1,0,0,0,1], n = 1
輸出:true

題解

仔細觀察能夠發(fā)現(xiàn),如果種了花,🌷花的兩邊都應該是空,即 組成 "010"的排布

我們的貪心策略是,能種花的時候,就種下一顆花🌷;也就是說,遇到“000”在一起的時候,就代表能夠種花了

那么再次觀察我們會發(fā)現(xiàn),如果是“00”打開頭,或者“00”打結尾的情況呢?

這里就需要我們對于原數(shù)組進行一下處理了:在開頭和結尾都加上 0,這個 0 不會對原來的有什么影響,反而方便我們進行判斷操作;

class Solution { public://核心 就是010 三個是一起的 記住bool canPlaceFlowers(vector<int>& flowerbed, int n) {flowerbed.insert(flowerbed.begin(),0);//前后插入0 因為3個捆綁一起的 但是首,尾可以種花 所以改變一下flowerbed.push_back(0);int m=0;//放下的個數(shù)for(int i=0;i<flowerbed.size()-2;i++) //減去2 1.原來的倒數(shù)第一現(xiàn)在倒數(shù)第二 2. i從0開始的下標{if(flowerbed[i]==0&&flowerbed[i+1]==0&&flowerbed[i+2]==0){m++;i++;}}return m>=n; //因為返回是bool類型} };

122.買賣股票的最佳時機Ⅱ💳

題目描述

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

輸入輸出樣例

輸入: [7,1,5,3,6,4]
輸出: 7
解釋: 在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4 。
隨后,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6-3 = 3 。

題解
其實我們最基本的疑問,就是怎么去知道這個最大的值呢?💳

比如:[7,1,5,3,6,4];我在第二天價格是 1 的時候買了,后面的價格有 5 ,有6,我是不是應該留在價格是6的時候再賣出去呢?

不是這樣的!

我們的原則是 每天都買賣!💳

比如 [1,2,3,4,5]; 在 1 開始 買,5 開始賣; 怎么知道在 5 開始賣的?其實 我們這樣想, 每天都買賣,意思是 1 開始買 , 第二天 是 2 漲了,賣掉,但是 3 也漲了,而且 3 > 2 ;

我們應該在 3 開始賣,相當于,1 處買,2 處賣;看見3 又買了2 ,再賣3;(上帝視角,雖然過程不能這樣做);

總結就是,只要后面一天價格更高,我就賣;💳

不存在后面再跌 然后再等一個最大值的情況,這個情況還不如 先賣了,然后低點買 然后再賣;

每天都買賣 !!!💳

class Solution { public:int maxProfit(vector<int>& prices) {int total = 0;for(int i = 1; i < prices.size(); ++i) {if (prices[i] > prices[i-1]) {total += prices[i] - prices[i-1];}}return total;} };

總結

以上是生活随笔為你收集整理的通俗易懂:贪心算法(三):习题练习 (力扣605种花问题、122买卖股票的最佳时机)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。