成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

雙“11”搞促銷?用貪心算法來盤他!

開發 前端 算法
這幾年商家為了刺激消費是變著花樣的推出各種各樣的活動,以某多多為首的運營式電商更是讓我們看到了營銷的無限“潛力”。

[[351760]]

本文轉載自微信公眾號「Java中文社群」,作者磊哥。轉載本文請聯系Java中文社群公眾號。   

這幾年商家為了刺激消費是變著花樣的推出各種各樣的活動,以某多多為首的運營式電商更是讓我們看到了營銷的無限“潛力”。

這不,最近剛趕上雙 11,小區便利店的老王頭也推出了一項「空酒瓶子換酒」的促銷活動,它的規則是這樣的。

本文已收錄至 Github《小白學算法》系列:https://github.com/vipstone/algorithm

活動規則

客戶購買 X 瓶酒,就可以用 Y 個空酒瓶來兌換一瓶新酒。

  1. 提示: 
  2. X 和 Y 的取值如下: 
  3. 1 <= X <= 100 
  4. 2 <= Y <= 100 
  5. Y 值不固定,隨機抽取。 

如果喝掉了酒瓶中的酒,那么酒瓶就會變成空的。

請你計算最多能喝到多少瓶酒。

示例 1:

  1. 輸入:X = 9, Y = 3 
  2. 輸出:13 
  3. 解釋:你可以用 3 個空酒瓶兌換 1 瓶酒。所以最多能喝到 9 + 3 + 1 = 13 瓶酒。 

示例 2:

  1. 輸入:X = 15, Y = 4 
  2. 輸出:19 
  3. 解釋:你可以用 4 個空酒瓶兌換 1 瓶酒。所以最多能喝到 15 + 3 + 1 = 19 瓶酒。 

示例 3:

  1. 輸入:X = 5, Y = 5 
  2. 輸出:6 

示例 4:

  1. 輸入:X = 2, Y = 3 
  2. 輸出:2 

解題思路

這道題難點有兩個:第一,用多少個空瓶換一瓶酒是不固定的(隨機的);第二,兌換的酒喝完之后還能繼續參與兌換活動。因此要在滿足這兩個的前提條件下,計算自己最多能喝到幾瓶。

可能有些朋友看到了本篇標題之后就知道了解題思路,沒錯,我們本文就是要用「貪心算法」來計算最終答案。同時這道題也符合貪心算法的解題思路,那就是有酒瓶就兌換、能兌換多少就兌換多少。

貪心算法

貪心算法(Greedy Algorithm),又稱貪婪算法,是一種在每一步選擇中都采取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是最好或最優的算法。

貪心算法在有最優子結構的問題中尤為有效。最優子結構的意思是局部最優解能決定全局最優解。簡單地說,問題能夠分解成子問題來解決,子問題的最優解能遞推到最終問題的最優解。

貪心算法的實現框架

從問題的初始解出發:

while(能朝給定總目標前進一步)

{

利用可行的決策,求出一個可行解元素;

}

由所有解元素組合成問題的一個可行解。

注意:因為用貪心算法只能通過解局部最優解的策略來達到全局最優解,因此,一定要注意判斷問題是否適合采用貪心算法策略,找到的解是否一定是問題的最優解。

接下來我們就用代碼來演示一下貪心算法的具體實現。

代碼實現 1:貪心

首先我們先把全局問題轉換成局部問題:當空瓶子能換一瓶酒的時候,我們就換一瓶酒,實現代碼如下:

  1. // 貪心1:用 + 和 - 實現 
  2. class Solution { 
  3.     public int numWaterBottles(int numBottles, int numExchange) { 
  4.         // 最大酒瓶數 
  5.         int total = numBottles; 
  6.         // 有酒瓶就兌換 
  7.         while (numBottles >= numExchange) { 
  8.             // 執行一輪兌換 
  9.             numBottles -= numExchange; 
  10.             ++total; 
  11.             // 兌換一次多一個酒瓶 
  12.             ++numBottles; 
  13.         } 
  14.         return total; 
  15.     } 

代碼解析

實現思路:

  1. 先把所有酒喝掉 int total = numBottles;
  2. 有足夠的空瓶就去換一瓶酒,執行一次 while 循環;
  3. 在循環中,空瓶的數量 +1,能喝到酒的數量 +1;
  4. 執行下一次循環判斷。

我們將以上代碼提交至 LeetCode,執行結果如下:

代碼實現 2:貪心改進

以上的貪心算法是一瓶酒一瓶酒進行循環兌換的,那我們可否每次將所有的空瓶子全部兌換完(可兌換的最大值),然后將兌換的酒再喝完,再進行下一次兌換?

答案是肯定的,我們只需要使用取模和取余操作就可以實現了,具體代碼如下:

  1. // 貪心 2:用 / 和 % 實現 
  2. class Solution { 
  3.     public int numWaterBottles(int numBottles, int numExchange) { 
  4.         // 總酒瓶數 
  5.         int total = numBottles; 
  6.         // 有酒瓶就兌換 
  7.         while (numBottles >= numExchange) { 
  8.             // 最多可兌換的新酒 
  9.             int n = numBottles / numExchange; 
  10.             // 累計酒瓶 
  11.             total += n; 
  12.             // 剩余酒瓶(剩余未兌換 + 已兌換喝掉的) 
  13.             numBottles = numBottles % numExchange + n; 
  14.         } 
  15.         return total; 
  16.     } 

我們將以上代碼提交至 LeetCode,執行結果如下:

總結

貪心算法初看感覺很“難”,但具體實現起來卻發現很簡單。其實「算法」也是一樣的,初看這個詞感覺很難很高大上,其實它就是解決某個問題的一種思想、一種固定的“套路”而已,也并無神秘可言。

人常說:路雖遠行則將至,事雖然難做者必成。“難”和“易”從來都是相對的,其實從“難”到“易”就是一個逐漸開悟、逐漸成長的過程。

愿你每天成長一點,最后留一個我的私人微信:GG_Stone,相互交流、共同進步。

參考 & 鳴謝

https://leetcode-cn.com/problems/water-bottles/

https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741375.html

https://zh.wikipedia.org/zh-hans/貪心算法

 

責任編輯:武曉燕 來源: Java中文社群
相關推薦

2018-06-04 12:41:50

程序員貪心算法分析

2023-07-03 08:01:54

2020-04-22 11:19:07

貪心算法動態規劃

2019-10-29 15:09:52

Python貪心算法代碼

2017-10-26 11:21:18

IDC

2020-12-30 08:35:34

貪心算法監控

2020-12-03 11:07:15

數組貪心算法

2021-10-18 07:51:39

回溯算法面試

2020-11-10 14:36:39

華為云域名網站

2012-05-17 09:58:53

rsync

2013-11-06 15:05:10

雙11

2021-03-16 05:46:07

雙鏈表單鏈表LinkedList

2018-01-18 22:06:45

2010-12-24 15:09:05

斐訊

2011-12-08 10:52:49

服務器繁忙電子商務亞洲航空

2016-11-04 10:33:12

戴爾

2021-11-04 08:58:29

貪心算法策略

2015-10-28 23:07:17

E店寶ERP雙十一

2022-04-12 07:51:31

架構TPSQPS

2012-08-03 14:03:21

打印機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产女人叫床高潮大片免费 | 天天看天天摸天天操 | 日本免费小视频 | 毛片区| 国产日产欧产精品精品推荐蛮挑 | 日韩三区| 欧美日韩国产一区二区三区不卡 | 日本成人免费网站 | 亚洲日本一区二区三区四区 | av影音| 成人精品一区二区三区中文字幕 | 欧美精品在欧美一区二区少妇 | 日本免费在线 | 国产免费xxx | 黄色精品| 91精品久久久久久久久久 | 欧美黑人体内she精在线观看 | 国产成人综合亚洲欧美94在线 | 成人免费视频在线观看 | 在线色网址| 超碰在线人人 | 国产成人精品综合 | 日韩高清一区 | 免费在线观看av的网站 | 欧美男人天堂 | 91在线网站 | 日韩欧美一级精品久久 | 国产精品国产a级 | 国产美女一区二区三区 | 99精品久久久久久中文字幕 | 三级成人在线 | 黄色大片网站 | 成人免费一区二区 | 91精品入口蜜桃 | 亚洲精品二区 | 欧美一级二级三级 | 蜜桃av一区二区三区 | 久久国产精品久久久久久久久久 | 国产成人精品999在线观看 | 鲁一鲁资源影视 | 成人一区二区三区在线观看 |