LeetCode: 1052. 愛生氣的書店老闆(中等)
題目描述
今天,書店老闆有一家店打算試營業 customers.length 分鐘。每分鐘都有一些顧客(customers[i])會進入書店,所有這些顧客都會在那一分鐘結束後離開。
在某些時候,書店老闆會生氣。 如果書店老闆在第 i 分鐘生氣,那麼 grumpy[i] = 1,否則 grumpy[i] = 0。 當書店老闆生氣時,那一分鐘的顧客就會不滿意,不生氣則他們是滿意的。
書店老闆知道一個祕密技巧,能抑制自己的情緒,可以讓自己連續 X 分鐘不生氣,但卻只能使用一次。
請你返回這一天營業下來,最多有多少客戶能夠感到滿意的數量。
示例:
輸入:customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], X = 3
輸出:16
解釋:
書店老闆在最後 3 分鐘保持冷靜。
感到滿意的最大客戶數量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.
提示:
- 1 <= X <= customers.length == grumpy.length <= 20000
- 0 <= customers[i] <= 1000
- 0 <= grumpy[i] <= 1
題解
滿意的數量 = 老闆正常不生氣的顧客滿意數量(grumpy[i] 原本為0) + 老闆使用祕密技巧獲得顧客滿意的數量(從 grumpy[i] 從1 -> 0)。
- 老闆正常不生氣的獲得顧客的滿意數量使用for迴圈計算grumpy[i]為0時的customer[i]值
- 老闆使用祕密技巧獲得顧客滿意的數量採用滑動視窗計算,統計量為max
a) 視窗擴大,將grumpy[i]為1的customer[i]加進來
b) 若視窗大於X時,收縮視窗,減去grumpy[i-X]為1的customer[i-X]
c) 若當前視窗內新增滿意客戶數count的值大於max,則更新max
返回 base + max
class Solution {
public:
int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
int max=0,base=0;//max記錄通過抑制脾氣改變的從不滿意到滿意的最大客戶,base記錄原先就是滿意的客戶數,count當前視窗內新增滿意客戶數
for(int i=0,count=0;i<grumpy.size();i++)
{
if(grumpy[i]==0) base += customers[i];
if(i < X && grumpy[i]==1)//滑動視窗小於X時 並且這時候會生氣就加入count
count += customers[i];
// 滑動視窗右移中,(i - X, i] 這段就是滑動視窗
else if(i >= X)
{
//滑動視窗左端移出右端移進,移出時若老闆生氣,則減去此時顧客數,移進時若老闆生氣,則加上此時顧客數,
if(i-X >= 0 && grumpy[i-X]==1)
count -= customers[i-X];
if(grumpy[i]==1)
count += customers[i];
}
if(count > max) max = count;//更新max值
}
return base + max;
}
};
複雜度分析
時間複雜度:O(N),N 為陣列長度。
空間複雜度:O(1)。
參考
相關文章
- 力扣1052. 愛生氣的書店老闆-C語言實現-中等難度力扣C語言
- 【每日一題】愛生氣的書店老闆每日一題
- DAU提升50%,為什麼老闆還生氣?
- 問題很嚴重,老闆很生氣,這時該如何化險為夷?
- 老闆燃氣灶24小時售後服務熱線電話官方統一老闆燃氣灶維修中心
- 一個不像老闆的好老闆
- js解leetcode(32)-中等JSLeetCode
- 全民AI時代:乾洗店老闆、高中生齊上陣AI
- 小紅書實操玩法詳細教程,輕鬆當老闆!
- 來自老闆的死亡拷問!
- L2-042 老闆的作息表
- JAVA-LeetCode中等29兩數相除JavaLeetCode
- 當下實體店老闆,不讓機會溜走,也許“小”程式更適合你!
- 孟老闆 BaseAdapter封裝(五) ListAdapterAPT封裝
- LeetCode-5426、重新規劃路線-中等LeetCode
- 老闆畫了個餅,我信了
- LeetCode C++ 376. Wiggle Subsequence【Dynamic Programming】中等LeetCodeC++
- LeetCode C++ 50. Pow(x, n)【Recursion】中等LeetCodeC++
- ERP系統對企業老闆來說的作用
- 便活科將生調期書王老觀ohh
- 從頂級黑客到上市公司老闆黑客
- 老闆:你為什麼要選擇 Vue?Vue
- 孟老闆 Paging3 (二) 結合RoomOOM
- 老闆如何規劃資訊化建設?
- 我和書店的故事
- 如何給深愛的父母養老
- LeetCode C++ 56. Merge Intervals【排序/陣列】中等LeetCodeC++排序陣列
- 【leetcode】LCP 19. 秋葉收藏集(UlBDOe)(DP)[中等]LeetCode
- 【LeetCode刷題(中等程度)】946. 驗證棧序列LeetCode
- 雲之變4:想成為AIoT幕後老闆的雲AI
- 打工的人面對老闆是沒有溢價權的
- 日本Pocket Pair公司老闆Takuro Mizobe訪談錄AI
- 現在,千萬不要再和老闆,資本玩
- 你努力工作會讓老闆感動嗎?
- 【前端詞典】如何向老闆解釋反向代理前端
- 老闆居然讓我在Java專案中“造假”Java
- 你知道嗎?推行精益生產並不難,難就難在老闆是不是真想幹
- 我和書店