【Leetcode Daily】3652按策略买卖股票的最佳时机
发表于|更新于|力扣日常 | LeetcodeDaily
|总字数:263|阅读时长:1分钟|浏览量:
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个一维数组代表股票,另一个数组代表策略和一个数字 k,总之可以选择对策略操作:取其中连续 k 个数字,前半设持有,后半卖出。求最终最大利润。
思路分享
- 通过前缀和能方便地计算子数组的值,然后把题目的利润拆分成多个可操作的前缀和即可,具体如何拆分不赘述,总之赞美灵神。
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
文章作者: 陆爻齐-LuYaoQi
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!
相关推荐

2025-05-29
【Leetcode Daily】930和相同的二元子数组
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个整数数组和目标整数 goal,求子数组和恰好为 goal 的子数组数量。 思路分享 这是“恰好型滑动窗口”,本质上就是两个越长越合法的窗口结果之差。 实现有两个方式,一个是单独把滑动窗口划分一个函数,调用两次,求结果之差;另一个是只设置一次滑动窗口,不过要同时维护两个左指针,计算结果是直接累计数值之差。 代码解答(强烈建议自行解答后再看) 参考题解 123456789101112131415161718192021// 恰好型滑动窗口class Solution {public: int numSubarraysWithSum(vector<int>& nums, int goal) { int left1 = 0, left2 = 0, ans = 0; int sum1 = 0, sum2 = 0; int goal1 = goal, goal2 = goal+1; for (int right =...

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-04-24
【Leetcode Daily】1052爱生气的书店老板
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给两个整型数组,以及一个整数 minutes,按某个要求(具体看原题,难以简化),求一个数组在另一个数组和 minutes 约束下的求的最大值。 思路分享 陆爻齐的思路是计算窗口内(也就是冷静的分钟)不满意生气离开的最大值,加上不生气的心情值,再减去所有生气离开的数值得出答案,但由于思想复杂了点,所以略微修改模板结构,也就是下面陆爻齐的答案。 参照灵茶山艾府,其实只要区分开两部分相加即可,然后直接参照模板。这两部分,一个是不生气的值,一个是生气下的值,取生气下最大值即可。这样就不用像上面一样多一次运算。 https://leetcode.cn/problems/grumpy-bookstore-owner/solutions/2751888/ding-chang-hua-dong-chuang-kou-fu-ti-dan-rch7/ 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 12345678910111213141516171819202122232425class Solution...

2025-11-14
【Leetcode Daily】1094拼车
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个二维数组,其中的元素为长度 3 的一维数组,三个值分别是上车的人数,上车的下标,下车的下标,求整个过程中,车上的人数是否都小于 capacity。 思路分享 此前对于一段值的差值用前缀和处理,而前缀和的反面则是差分,求两个值的差值。所以差分记录的是值的变化,一个特点是,对于 a-b 区间的值加 10,相当于在差分数组上的 a 处加 10,b 处减 10. https://leetcode.cn/problems/car-pooling/solutions/2550264/suan-fa-xiao-ke-tang-chai-fen-shu-zu-fu-9d4ra/ 所以本题只要先求出整个数组的差分,再对差分做前缀和,过程中判断是否有值超过阈值即可。 代码解答(强烈建议自行解答后再看) 参考题解 12345678class Solution: def carPooling(self, trips: List[List[int]], capacity: int) -> bool: ...

2025-12-06
【Leetcode Daily】1109航班预订统计
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给一个航班预定表,内容分别是起始航班下标,终止航班下标,预订座位数组成的多个数据,求最终每个航班预定的座位数。 思路分享 越是做差分的题,越是发现,差分十分擅长处理增减的累计。拿此题来讲,只要通过差分记录各个航班的累计座位数,然后求前缀和即可。 https://leetcode.cn/problems/corporate-flight-bookings/solutions/968214/hang-ban-yu-ding-tong-ji-by-leetcode-sol-5pv8/ 代码解答(强烈建议自行解答后再看) 参考题解 1234567class Solution: def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]: rec = [0]*(n+2) for start, last, seats in bookings: rec[start] +=...

2025-05-06
【Leetcode Daily】1208尽可能使字符串相等
题目浅析 想查看原题可以点击题目链接。 简单地说,就是给两个字符串,和一个整数变量,求一个最长字符串的长度,使得一个字符串变换为另一个(ASCII码差值),变换的总值在那个整数之内。 思路分享 典型的不定长滑动窗口(【Leetcode Daily】3090每个字符最多出现两次的最长字符串,无需多盐 代码解答(强烈建议自行解答后再看) 陆爻齐的解法 123456789101112131415161718class Solution {public: int equalSubstring(string s, string t, int maxCost) { int curCost = 0; int left = 0; int n = t.size(); int ans = 0; for (int i = 0; i < n; i++) { curCost += abs(s[i]-t[i]); if (curCost...
公告
希望你我都能得偿所愿
PS:相对流水账的文章只能在归档找得到
系列文章
