LeetCode1518 換酒問題(貪心演算法)

2021-10-09 02:38:19 字數 1528 閱讀 2370

1、小區便利店正在**,用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。請你計算最多能喝到多少瓶酒。

方法一:模擬:

思路:首先我們一定可以喝到 b瓶酒,剩下 b個空瓶。接下來我們可以拿瓶子換酒,每次拿出 e個瓶子換一瓶酒,然後再喝完這瓶酒,得到乙個空瓶。以此類推,我們可以統計得到答案。

福再度分析:

時間複雜度:o(b/e),因為e≥2,而迴圈迭代時,每次 b 的變化為e−1,故這裡的漸進上界為 o(b/e)。

空間複雜度:o(1)

public

intnumwaterbottles

(int numbottles,

int numexchange)

return drinknum;

}

方法二:貪心法:複雜度分析:

時間複雜度:o(b/e)

空間複雜度:o(1)

思路:這道題其實考察的是數學思想,首先有多少瓶numbottles就喝了多少瓶酒,此刻空瓶emptybottles,然後就是把這些空瓶去兌換酒,那能兌換emptybottles//numexchange瓶,必須是向下取整,現在還剩emptybottles%numexchange+emptybottles/numexchange個空瓶可以去兌換,就這樣迴圈下去,直到可換的瓶數少於換瓶的條件截止。

/**

* 貪心演算法:每次把手裡的空瓶換成酒

* @param numbottles

* @param numexchange

* @return

*/public

intnumwaterbottles2

(int numbottles,

int numexchange)

return drinknum;

}

方法三:數學法:複雜度分析

時間複雜度:o(1)

空間複雜度:o(1)

* 數學法:drinknum = b+(b-e)/(e-1) +1

* @param numbottles

* @param numexchange

* @return

*/public

intnumwaterbottles3

(int numbottles,

int numexchange)

LeetCode 1518 換酒問題

小區便利店正在 用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。請你計算 最多 能喝到多少瓶酒。示例 1 輸入 numbottles 9,numexchange 3 輸出 13 解釋 你可以用 3 個空酒瓶兌換 ...

力扣Leetcode 1518 換酒問題

小區便利店正在 用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。請你計算 最多 能喝到多少瓶酒。示例 輸入 numbottles 9,numexchange 3 輸出 13 解釋 你可以用 3 個空酒瓶兌換 1 ...

1518 換酒問題

小區便利店正在 用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。請你計算 最多 能喝到多少瓶酒。示例 1 輸入 numbottles 9,numexchange 3 輸出 13 解釋 你可以用 3 個空酒瓶兌換 ...