学习Java第三十四天——黑马点评48~60
文章目录
- Leetcode每日一题:
- 实战篇-优惠券秒杀
-
- 实战篇-01.优惠券秒杀-全局唯一ID
- 实战篇-02.优惠券秒杀-Redis实现全局唯一id
- 实战篇-03.优惠券秒杀-添加优惠券
- 实战篇-04.优惠券秒杀-实现秒杀下单
- 实战篇-05.优惠券秒杀-库存超卖问题分析
- 实战篇-06.优惠券秒杀-乐观锁解决超卖
- 实战篇-07.优惠券秒杀-实现一人一单功能
- 实战篇-08.优惠券秒杀-集群下的线程并发安全问题
- 实战篇-09.分布式锁-基本原理和不同实现方式对比
-
- 实战篇-10.分布式锁-Redis的分布式锁实现思路
- 实战篇-11.分布式锁-实现Redis分布式锁版本1
- 实战篇-12.分布式锁-Redis分布式锁误删问题
- 实战篇-13.分布式锁-解决Redis分布式锁误删问题
Leetcode每日一题:
bym思路: 一开始尝试双指针,思路为固定两个数,形成前后双指针,如然后只要找一个mid指针使得三数相加等于0,结果不知道找到后指针怎么走了。于是尝试三次循环暴力,最坏仍是 O(n³),加了少量剪枝也很容易超时。实在受不了了,给GPT优化:把最内层改成双指针,整体降到 O(n²) 就能过。
by灵茶山艾府: 枚举 nums[i]
,问题变成 nums[j]+nums[k]=−nums[i]
,这和 167. 两数之和 II - 输入有序数组 - 力扣(LeetCode) 是一样的。
两个小剪枝:
// 如果最小三数之和都 > 0,后面更不可能了
if (nums[i] + nums[i+1] + nums[i+2] > 0) break;
// 如果与当前能取到的最大两数之和仍 < 0,换下一个 i
if (nums[i] + nums[n-2] + nums[n-1] < 0) continue;`
实战篇-优惠券秒杀
前两章用Redis解决Session共享问题和用Redis添加查询业务的缓存并且应对缓