LeetCode-1052。不機嫌そうな書店のオーナー[中]-分析とコード(Java)

LeetCode-1052。Angry Bookstore Owner [Grumpy Bookstore Owner] [Medium]-分析とコード[Java]

1.トピック

今日、書店のオーナーは、customers.length分を試用して開店する予定の店を持っています。毎分、何人かの顧客(customers [i])が書店に入り、その分が終わると、これらすべての顧客は去ります。
ある時点で、書店のオーナーは怒ります。書店のオーナーがi分目に怒っている場合は、grumpy [i] = 1、それ以外の場合はgrumpy [i] = 0です。書店のオーナーが怒っていると、その瞬間のお客さんは不満になり、怒っていなければ満足します。
書店のオーナーは、感情を抑えてX分間怒らないようにする秘訣を知っていますが、使用できるのは1回だけです。
満足できる最大のお客様である今日の営業に戻ってください。

例:

输入: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 <=顧客[i] <= 1000
  • 0 <=不機嫌[i] <= 1

出典:LeetCode
リンク:https://leetcode-cn.com/problems/grumpy-bookstore-owner
著作権はLeetCodeが所有しています商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

2、分析とコード

1.スライディングウィンドウ

(1)考える

一方では、書店の所有者が怒っていない場合は、満足している顧客の数を決定します。他方では、長さXのスライディングウィンドウを設計します。統計ウィンドウで、書店によって引き起こされた不満の顧客の最大数。所有者の怒りは2つの合計です。解決策。

(2)コード

class Solution {
    
    
    public int maxSatisfied(int[] customers, int[] grumpy, int X) {
    
    
        int n = customers.length, custNum = 0, dec = 0; 
        for (int i = 0; i < X; i++) {
    
         
            if (grumpy[i] == 1)
                dec += customers[i];
            else
                custNum += customers[i];//统计顾客满意数
        }
        int decMax = dec;//减小的最大损失
        for (int i = X; i < n; i++) {
    
    
            if (grumpy[i - X] == 1)//移出窗口的不满意顾客数
                dec -= customers[i - X];
            if (grumpy[i] == 1)
                dec += customers[i];//移入窗口的不满意顾客数
            else
                custNum += customers[i];//继续统计顾客满意数
            decMax = Math.max(decMax, dec);
        }
        return custNum + decMax;
    }
}

(3)結果

実行時間:4ミリ秒、
すべてのJava送信でユーザーの39.80%を上回っています。メモリ消費量:40.7 MB、すべてのJava送信でユーザーの87.15%を上回っています。

3、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/114235057