leetcode 2483

2483: 商店的最少代价

把 customers 分成两段,第一段计算 N 的个数 preN,第二段计算 Y 的个数 sufY。

注:也可以不分割,相当于其中一段是空的。

思路:先假设所有字母都在第二段(关门),统计 customers 中 Y 的个数 sufY。想象一根分割线在从左到右移动,customers[i] 原来在第二段,现在在第一段。如果 customers[i]=N,那么把 preN 加一(preN 初始值为 0),否则把 sufY 减一。答案为 preN+sufY 最小时对应的分割位置。

代码实现时,preN+sufY 可以合并为一个变量 penalty。

复制代码
class Solution {
public:
    int bestClosingTime(string customers) {
        int penalty = ranges::count(customers, 'Y');
        int min_penalty = penalty;
        int ans = 0; // [0,n-1] 是第二段
        for (int i = 0; i < customers.size(); i++) {
            penalty += customers[i] == 'N' ? 1 : -1;
            if (penalty < min_penalty) {
                min_penalty = penalty;
                ans = i + 1; // [0,i] 是第一段,[i+1,n-1] 是第二段
            }
        }
        return ans;
    }
};
相关推荐
khddvbe9 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
C羊驼9 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程
菜菜小狗的学习笔记9 小时前
剑指Offer算法题(四)链表
数据结构·算法·链表
myloveasuka9 小时前
[Java]查找算法&排序算法
java·算法·排序算法
清水白石00810 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
We་ct10 小时前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法
本喵是FW10 小时前
C语言手记1
java·c语言·算法
咱就是说不配啊11 小时前
3.19打卡day33
数据结构·c++·算法
2501_9249526911 小时前
嵌入式C++电源管理
开发语言·c++·算法
2401_8426236511 小时前
C++中的访问者模式高级应用
开发语言·c++·算法