【Leetcode Daily】2483商店的最少代价
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:475|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个一维数组,其中的每一个值代表一个时间段有没有客人到来(Y 有,N 无),现在需要选择能使代价最小的关门时间,关门前一个时间段无客人就 1 代价,关门后一个时间段有人就有 1 代价。
思路分享
这边第一时间实现的方法,是先求了 Y 和 N 的前缀和,结合各自的总和,对整个日志做依次遍历,过程中结合上面的值 O(1)计算代价。虽然过了,但消耗的时间和空间所有人中属于较多的。
但是灵神提出了能显著降低消耗的时间与空间的方法。前缀和不需要提前求,遍历过程中直接实时计算,遍历的当前点,也就是假设开始时所有点都在关门后,让当前时间为关门时间,左边遇到一个 Y 就让代价 -1,否则 +1,这样子就迅速地得到了所有所有的代价,自然也就能获取其中的最小值。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-12-26
【Leetcode Daily】3493属性图
题目浅析 想查看原题可以点击题目链接。 简单地说,给一个二维数组代表一个个点,一个一维数组代表一个点的内容,先规定给定数值 k,任意两个不同的点有超过 k 各相同的各异值则相连,求现在图中的连通分量。 思路分享 求连通分量,各种连接?上并查集!并查集的相关思路请看 【Leetcode Daily】684冗余连接 不过还有一个子问题需要解决:怎么快速地判断两个点有没有 k 个或以上的各异值相同; 判断各异值的相同个数,本质上就是求两个集合的交集,所以只要把所有的点化为集合,然后就能用求交集的方式解决这个子问题。总体上与灵神思路相近,不过灵神通过运用 map 函数快速地变换了点的形态到集合,值得借鉴。 https://leetcode.cn/problems/properties-graph/solutions/3624345/bing-cha-ji-pythonjavacgo-by-endlesschen-xi0d/ 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425class...

2025-12-25
【Leetcode Daily】684冗余连接
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个图,说这原来是个树(没闭环),后来加了一条边才变成了现在的图,请遍历边集并找出那个冗余的边,如果有多个答案,取靠后的。 思路分享 得用并查集,因为要将树变成图,就是两个同一组的节点相连,而树的构建过程中,两个点必定属于不同类(一旦属于同类,相连后就会产生闭环)。 所以只要构建出并查集,遍历边,找到两个点属于同一类的最后的答案即可。 https://leetcode.cn/problems/redundant-connection/solutions/557616/rong-yu-lian-jie-by-leetcode-solution-pks2/ 代码解答(强烈建议自行解答后再看) 参考题解 1234567891011121314151617181920class Solution: def findRedundantConnection(self, edges: List[List[int]]) -> List[int]: n = len(edges) ...

2025-12-27
【Leetcode Daily】990等式方程的可满足性
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一系列 == 或者 != 的等式或不等式,左右两侧会是小写字母的变量,求所有式子是否不矛盾。 思路分享 当出现等式,就是两边应该属于一类,不等式即不属于一类,那就直接并查集先把相等的归类,再看不等是否产生矛盾。 https://leetcode.cn/problems/satisfiability-of-equality-equations/solutions/279091/deng-shi-fang-cheng-de-ke-man-zu-xing-by-leetcode-/ 那有小朋友可能要问了,为什么不能先不等呢?因为并查集刚开始初始化时大家都不等,自然都满足,所以就先处理相等,再处理不等才能发生矛盾。 代码解答(强烈建议自行解答后再看) 参考题解 12345678910111213141516171819202122232425262728class Solution: def equationsPossible(self, equations:...

2025-08-13
【Leetcode Daily】1003检查替换后的词是否有效
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个字符串,该字符串是从一个空字符串开始,不断插入“abc”形成的,这个插入是从字符串的任意处都可以行动。 思路分享 这个题目和实际的题意完全不是一个意思,坏。不过这个不重要。 发现做栈,只要把握一点,就是何时弹栈。例如本题,只要意识到,弹栈的时候,正在遍历的字母是 c,栈顶有 a 和 b,就轻松地写出了条件。 这个条件应该不是最快的,因为只要中间的 abc 有一处无法正确匹配,就可以算是检测不过关,所以更快的思路应该是按照正在遍历的 abc 三种情况,分别检测栈是否符合“正常”。 https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions/solutions/2253773/zhan-jian-ji-xie-fa-pythonjavacgo-by-end-i9o7/ 本题不断插入 abc,并要求检测是否都是...

2025-05-08
【Leetcode Daily】1004最大连续1的个数III
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个由 0 和 1 组成的整数数组,现在最多可以把其中 k 个 0 反转成 1。求反转后最长连续 1 的个数。 思路分享 纯粹的不定长滑动窗口(【Leetcode Daily】3090每个字符最多出现两次的最长字符串),无需多盐。 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 1234567891011121314151617class Solution {public: int longestOnes(vector<int>& nums, int k) { int zero_count = 0; int left = 0; int n = nums.size(); int ans = 0; for (int i = 0; i < n;i++) { zero_count += 1-nums[i]; while(zero_count...

2025-08-19
【Leetcode Daily】1021删除最外层的括号
题目浅析 想查看原题可以点击题目链接。 简单地说,就是按照题目规定的“原语”来分解有效的括号字符串,要求去掉最外面的一层括号。 思路分享 通过栈记录可以判定当前的括号是否为最外层。具体方法是记录符号时,如果栈内有括号,说明不是最外层,就记录到结果中,否则就只压栈。 https://leetcode.cn/problems/remove-outermost-parentheses/solutions/1520365/shan-chu-zui-wai-ceng-de-gua-hao-by-leet-sux0/ 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415class Solution: def removeOuterParentheses(self, s: str) -> str: res, stack = "", [] for c in s: print(res) print(stack) ...
公告
希望你我都能得偿所愿
PS:相对流水账的文章只能在归档找得到
系列文章
