[Swift]LeetCode1052.爱生气的书店老板 | Grumpy Bookstore Owner
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10925087.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Today, the bookstore owner has a store open for customers.length
minutes. Every minute, some number of customers (customers[i]
) enter the store, and all those customers leave after the end of that minute.
On some minutes, the bookstore owner is grumpy. If the bookstore owner is grumpy on the i-th minute, grumpy[i] = 1
, otherwise grumpy[i] = 0
. When the bookstore owner is grumpy, the customers of that minute are not satisfied, otherwise they are satisfied.
The bookstore owner knows a secret technique to keep themselves not grumpy for X
minutes straight, but can only use it once.
Return the maximum number of customers that can be satisfied throughout the day.
Example 1:
Input: customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], X = 3 Output: 16 Explanation: The bookstore owner keeps themselves not grumpy for the last 3 minutes. The maximum number of customers that can be satisfied = 1 + 1 + 1 + 1 + 7 + 5 = 16.
Note:
1 <= X <= customers.length == grumpy.length <= 20000
0 <= customers[i] <= 1000
0 <= grumpy[i] <= 1
今天,书店老板有一家店打算试营业 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
1 class Solution { 2 func maxSatisfied(_ customers: [Int], _ grumpy: [Int], _ X: Int) -> Int { 3 var base = 0 4 for i in 0..<customers.count where grumpy[i] == 0 { 5 base += customers[i] 6 } 7 8 var curr = base, ans = base 9 for i in 0..<customers.count { 10 if grumpy[i] == 1 { 11 curr += customers[i] 12 } 13 14 if i >= X { 15 if grumpy[i-X] == 1 { 16 curr -= customers[i-X] 17 } 18 } 19 ans = max(ans, curr) 20 } 21 22 return ans 23 } 24 }
Runtime: 244 ms
1 class Solution { 2 func maxSatisfied(_ customers: [Int], _ grumpy: [Int], _ X: Int) -> Int { 3 var customers:[Int] = customers 4 var grumpy:[Int] = grumpy 5 let n:Int = customers.count 6 7 var ans:Int = 0 8 for i in 0..<n 9 { 10 if (grumpy[i] == 0) || i < X 11 { 12 ans += customers[i] 13 } 14 } 15 var cur:Int = ans 16 for p in X..<n 17 { 18 let q:Int = p - X 19 if grumpy[q] != 0 {cur -= customers[q]} 20 if grumpy[p] != 0 {cur += customers[p]} 21 ans = max(ans, cur) 22 } 23 return ans 24 } 25 }