当前位置: 首页 > news >正文

python 02 List

Python 1-14 列表

第一课

1437. 是否所有 1 都至少相隔 k 个元素

class Solution:def kLengthApart(self, nums: List[int], k: int) -> bool:cnt = k # 处理第一个 1for i, x in enumerate(nums):if x == 1:if cnt < k: return Falsecnt = 0 # 遇到 1 从新记数else: cnt += 1return True# left = -(k + 1) # 处理第一个 1# for i, x in enumerate(nums):#     if x == 1:#         if i - left <= k: return False#         left = i # 记录 1 的位置# return True

997. 找到小镇的法官

有向图中节点的入度和出度的概念。在有向图中,一个节点的入度是指向该节点的边的数量;而一个节点的出度是从该节点出发的边的数量。

class Solution:def findJudge(self, n: int, trust: List[List[int]]) -> int:        if n == 1: return 1d = [0] * (n + 1) # 列表的元素全是 0,共 n + 1 元素。for a, b in trust:d[b] += 1 # 如果被信任加一d[a] -= 1 # 信任别人减一for i, x in enumerate(d):if x == n - 1: return i# if n - 1 in arr: return arr.index(n - 1)return -1

26. 删除有序数组中的重复项

class Solution:def removeDuplicates(self, nums: List[int]) -> int:left = 1n = len(nums)for i in range(1, n):if nums[i] != nums[i - 1]:nums[left] = nums[i]left += 1return left

第二课

★1436. 旅行终点站

知识点: 列表 list,append。

class Solution:def destCity(self, paths: List[List[str]]) -> str:start, end = [], []for s, e in paths:start.append(s)end.append(e)for x in end:if x not in start:return x

1299. 将每个元素替换为右侧最大元素

知识点: 逆序遍历

class Solution:def replaceElements(self, arr: List[int]) -> List[int]:n, m = len(arr), -1 # m 记录最大值for i in range(n - 1, -1, -1): # 逆序遍历m, arr[i] = max(arr[i], m), m # 原地修改,可定义列表。return arr

1394. 找出数组中的幸运数

class Solution:def findLucky(self, arr: List[int]) -> int:q = [0] * 501 # 统计个数# q[0] = -1 # 去掉 0for x in arr:  # 统计每个数的个数q[x] += 1# res = -1 # 先假设没有# for i, x in enumerate(q[1:], 1):            #     if i == x: res = i# return res for x in range(len(q) - 1, 0, -1): # 逆序遍历if x == q[x]: return xreturn -1

python 内置函数 enumerate()

将一个 可遍历 iterable 数据对象(如 list、tuple 或 str)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
函数返回一个 enumerate 对象,是一个 可迭代对象。具体元素值可通过遍历取出。

语法:

enumerate(sequence, [start=0])

参数:
sequence – 一个序列、迭代器或其他支持迭代对象。是一个可迭代对象。
start – 下标起始位置。是一个可选参数,表示索引从几开始计数。

返回 enumerate(枚举) 对象。

a = [1,2,3,4]
# 从第二个元素开始,下标从 1 开始
for i, x in enumerate(a[1:], 1):print(i, x)
# 1 2
# 2 3
# 3 4

**知识点:**推导式,生成器,next。
教程:Python 推导式

class Solution:def destCity(self, paths: List[List[str]]) -> str:citiesA = {path[0] for path in paths}return next(path[1] for path in paths if path[1] not in citiesA)

第三课

1700. 无法吃午餐的学生数量

class Solution:def countStudents(self, students: List[int], sandwiches: List[int]) -> int:# n = 0# while n < len(students):#     if students[0] == sandwiches[0]:#         students.pop(0)#         sandwiches.pop(0)#         n = 0#     else:#         students = students[1:] + [students[0]]#         n += 1# return ncnt = [0, 0]  # 统计喜欢圆形和方形三明治学生数量for i in students: cnt[i] += 1for i in sandwiches:    # 依次取出栈顶三明治,直到没有学生喜欢 i。if cnt[i] == 0: breakcnt[i] -= 1return sum(cnt)

▲1089. 复写零

class Solution:def duplicateZeros(self, arr: List[int]) -> None:"""Do not return anything, modify arr in-place instead."""## 方法一:insert pop# i = 0# while i < len(arr):#     if not arr[i]:#         arr.pop()#         arr.insert(i, 0)#         i += 1#     i += 1## 方法二:添加标记       n = len(arr)i = j = 0while j < n:if arr[i] == 0: j += 1i += 1j += 1i -= 1    # i 回到最后一次合法的位置j -= 1    # j 同理,但 j 仍可能等于 n(例如输入 [0])while i >= 0:if j < n: arr[j] = arr[i]if arr[i] == 0:j -= 1arr[j] = arr[i]i -= 1j -= 1

904. 水果成篮

算法:双指针

class Solution:def totalFruit(self, fruits: List[int]) -> int:arr = [0] * len(fruits) # 0 <= 种类 < len(fruits) <= 100000left = 0 # 左边界k = 0 # 记录区间包含的种类for i, x in enumerate(fruits):if arr[x] == 0: k += 1 # 遇到一种arr[x] += 1 # 计数if k > 2:  # 种类 > 2 左边同步收缩 否则右边单边扩张y = fruits[left] arr[y] -= 1 if arr[y] == 0: k -= 1 left += 1return len(fruits) - left # n - 1 - left + 1

第四课

390. 消除游戏

class Solution:def lastRemaining(self, n: int) -> int:# 方法一:模拟 转成 list 会超时arr = range(1, n + 1) # 可迭代对象,用一个生成一个while len(arr) > 1:arr = arr[1::2][::-1]return arr[0]# 方法二flag, a, step = True, 1, 1while n > 1:           if flag or n & 1: a += step           flag = not flagn >>= 1step <<= 1        return a# 方法三:递归return 1 if n == 1 else 2 * (n // 2 + 1 - self.lastRemaining(n // 2))

1652. 拆炸弹

class Solution:def decrypt(self, code: List[int], k: int) -> List[int]:n = len(code)ans = [0] * nif k == 0: return ansres = []code += codeif k > 0:l, r = 1, kelse:l, r = n + k, n - 1w = sum(code[l:r+1])for i in range(n):res.append(w)w -= code[l]w += code[r + 1]l, r = l + 1, r + 1return res

2516. 每种字符至少取 K 个

第五课

88. 合并两个有序数组

1768. 交替合并字符串

class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:i, j = m - 1, n - 1for k in range(m+n-1,-1,-1):if j == -1: break # 如果 nums2 移完了结束if i == -1 or nums1[i] < nums2[j]:  # 如果 nums1 移完了,接着移 num2nums1[k] = nums2[j]j -= 1else:nums1[k] = nums1[i]i -= 1

2022. 将一维数组转变成二维数组

class Solution:def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]:return [original[i:i + n] for i in range(0,  len(original), n)] if len(original) == m * n else []

915. 分割数组

class Solution:def partitionDisjoint(self, nums: List[int]) -> int:n = len(nums)# 三次遍历# left, right = [0] * n, [0] * n# left[0], right[-1] = nums[0], nums[-1]# for i in range(n - 2, -1, -1):#     right[i] = min(right[i + 1], nums[i])# for i in range(1, n):#     left[i] = max(left[i - 1], nums[i])# for i in range(n):#     if left[i] <= right[i+1]:#         return i + 1# 二次遍历# right = [0] * n# max_, right[-1] = 0, nums[-1]# for i in range(n - 2, -1, -1):#     right[i] = min(right[i + 1], nums[i])# for i in range(n - 1):#     max_ = max(max_, nums[i])#     if max_ <= right[i + 1]:#         return i + 1# 一次遍历pos, max_, left = 1, nums[0], nums[0]for i, x in enumerate(nums):max_ = max(max_, x)if x < left:left = max_pos = i + 1return pos 

练习

807. 保持城市天际线

class Solution:def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:row = list(map(max, grid))col = list(map(max, zip(*grid)))return sum(min(row[i], col[j]) - h for i, r in enumerate(grid) for j, h in enumerate(r))

1716. 计算力扣银行的钱

等差数列的通项公式为:an = a1 + (n - 1) d
前n项和公式为:Sn = na1 + n (n - 1) d / 2 或 Sn = n (a1 + an) / 2

class Solution:def totalMoney(self, n: int) -> int:# w, d = divmod(n, 7)         # res = w * 28 + w * (w - 1) * 7 // 2 # 整周计算# res += d * (w + 1) + d * (d - 1) * 1 // 2 week, day, res = 0, 1, 0        for i in range(n):res += week + dayday += 1if day == 8:day = 1week += 1return res

1995. 统计特殊四元组

class Solution:def countQuadruplets(self, nums: List[int]) -> int:        res = 0n = len(nums)for i in range(n-3):for j in range(i+1,n-2):for k in range(j+1,n-1):for l in range(k+1,n):if nums[i]+nums[j]+nums[k] == nums[l]:res += 1return res

372. 超级次方

模运算对于乘法与加法满足交换律与结合律

(a ∗ b) % c = (a % c) ∗ (b % c) % c

pow(x, y[, z])
如果z在存在,则再对结果进行取模,其结果等效于 pow(x, y) % z
pow(a, 123) = pow(a, 3) * pow(pow(a, 12), 10) # 123 = 12 * 10 + 3

class Solution:def superPow(self, a: int, b: List[int]) -> int:return pow(a, b.pop()) * pow(self.superPow(a, b), 10) % 1337  if b else 1

279. 完全平方数

方法一:数学

四平方定理: 任何一个正整数都可以表示成不超过四个整数的平方之和。
推论: if and only if n is not of the form n = 4a ( 8 b + 7 ) for integers a and b.
当且仅当 n ≠ 4 k × ( 8 m + 7 ) n \neq 4^k \times (8m+7) n=4k×(8m+7) 时,n 可以被表示为至多三个正整数的平方和。

class Solution:def numSquares(self, n: int) -> int:        sqr = int(sqrt(n))if n == sqr * sqr: return 1# 4 * x**2 = (2*x) ** 2        while n % 4 == 0:n >>= 2if n & 7 == 7: return 4 # n & 7 等价于 n % 8i = 0while i*i < n:j = int(sqrt(n - i*i))if i*i + j*j == n:  return 2i += 1return 3

方法二:动态规划

f[i] 表示最少需要多少个数的平方来表示整数 i。
这些数必然落在区间 [ 1 , n ] [1,\sqrt{n}] [1,n ]。枚举这些数,假设当前枚举到 j,那么还需要取若干数的平方,构成 i − j 2 i-j^2 ij2 。此时子问题和原问题一样,规模更小,符合了动态规划的要求。
状态转移方程:

f [ i ] = 1 + min ⁡ j = 1 ⌊ i ⌋ f [ i − j 2 ] f[i]=1+\min_{j=1}^{\lfloor\sqrt{i}\rfloor}{f[i-j^2]} f[i]=1+minj=1i f[ij2]

边界条件 f [ 0 ] = 0 f[0]=0 f[0]=0

因为计算 f [ i ] f[i] f[i] 时所需要用到的状态仅有 f [ i − j 2 ] f[i-j^2] f[ij2],必然小于 i,因此只需要从小到大地枚举 i 来计算 f [ i ] f[i] f[i] 即可。

class Solution:def numSquares(self, n):if n == int(sqrt(n)) ** 2: return 1dp = [inf for i in range(n + 1)] # 4dp[0] = 0for i in range(n + 1):j = 1while i + j*j <= n:dp[i + j*j] = min(dp[i + j*j], dp[i] + 1)j += 1return dp[n]

2239. 找到最接近 0 的数字

class Solution:def findClosestNumber(self, nums: List[int]) -> int:ans = inffor x in nums:if abs(x) == abs(ans): ans = max(x, ans)elif abs(x) < abs(ans):  ans = x                return ans

2432… 处理用时最长的那个任务的员工

class Solution:def hardestWorker(self, n: int, logs: List[List[int]]) -> int:ans = pre = most = 0for i, t in logs: dif = t - prepre = tif most < dif or most == dif and ans > i:ans = imost = difreturn ans

1610. 可见点的最大数目

在视角 angle 范围内内最多的点数。
location 为极点,刚好位于 location 的点单独进行统计,计算其它所有点的极角,然后排序。
在极坐标系中,平面上任何一点到极点的连线和极轴的夹角叫做极角。
极坐标和直角坐标的互化:在这里插入图片描述
函数「atan2」的返回值范围为 [−π,π],它的覆盖范围为 2π。将 angle 转换成弧度。
由于存在 d p i + angle > π d_{p_i} + \textit{angle} > π dpi+angle>π 的情况,可以在原数组中将每个元素 d p i + 2 π d_{p_i} + 2π dpi+2π 添加到原数组的后面,这样即可防止反转的问题。

class Solution:def visiblePoints(self, points: List[List[int]], angle: int, location: List[int]) -> int:same, polar = 0, []for p in points:if p == location: same += 1else:polar.append(atan2(location[1] - p[1], location[0] - p[0]))polar.sort()polar += [p + 2 * pi for p in polar]arc = angle * pi / 180# 二分查找# return max((bisect_right(polar, p + arc) - i for i, p in enumerate(polar)), default=0) + same# 滑动窗口n, maxCount, right = len(polar), 0, 0for i in range(n//2):while right < n and polar[right] <= polar[i] + arc:right += 1maxCount = max(maxCount, right - i)return maxCount + same

相关文章:

python 02 List

Python 1-14 列表 第一课 1437. 是否所有 1 都至少相隔 k 个元素 class Solution:def kLengthApart(self, nums: List[int], k: int) -> bool:cnt k # 处理第一个 1for i, x in enumerate(nums):if x 1:if cnt < k: return Falsecnt 0 # 遇到 1 从新记数else: cnt …...

【秋招笔试】09.28科大讯飞秋招(已改编)-研发岗

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 本次的三题全部上线…...

[SAP ABAP] 锁对象

在SAP中使用锁对象&#xff0c;用于避免在数据库中插入或更改数据时出现不一致的情况 1.创建锁对象 数据准备 学校表(ZDBT_SCH_437) 使用事务码SE11创建锁对象 点击"锁对象"单选按钮&#xff0c;输入以E开头的锁定对象的名称&#xff0c;然后点击创建按钮 锁对象名…...

Docker快速部署RabbitMq教程

1、拉取RabbitMQ镜像 docker pull rabbitmq:management RabbitMQ Management 插件为 RabbitMQ 提供了一个基于 Web 的用户界面&#xff08;Management UI&#xff09;&#xff0c;允许你通过浏览器来监控、管理 RabbitMQ 实例。 因为docker默认是使用的是Docker Hub的官方镜…...

解决银河麒麟V10中/data目录执行权限问题

解决银河麒麟V10中/data目录执行权限问题 1、问题描述2、解决方案步骤一&#xff1a;编辑fstab文件步骤二&#xff1a;重启系统步骤三&#xff1a;验证更改 3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟桌面操作系…...

画两个数的平方和的曲线

代码1&#xff1a; from mpl_toolkits import mplot3d import numpy as np import matplotlib.pyplot as plt# Creating dataset x np.outer(np.linspace(-3, 3, 32), np.ones(32)) y x.copy().T # transpose z (x **2 y **2 )# Creating figure fig plt.figure(figsize …...

问:进程/线程上下文切换场景及相关概念?

进程、线程以及上下文切换是操作系统和并发编程中不可或缺的概念。这些概念不仅理论意义重大&#xff0c;而且在实际应用中起着至关重要的作用。掌柜将通过具体场景&#xff0c;探讨它们之间的关联以及上下文切换过程。_ 一、进程与线程 进程&#xff08;有时也称为任务&…...

神经网络(一):神经网络入门

文章目录 一、神经网络1.1神经元结构1.2单层神经网络&#xff1a;单层感知机1.3两层神经网络&#xff1a;多层感知机1.4多层神经网络 二、全连接神经网络2.1基本结构2.2激活函数、前向传播、反向传播、损失函数2.2.1激活函数的意义2.2.2前向传播2.2.3损失函数、反向传播2.2.4梯…...

卸载apt-get 安装的PostgreSQL版本

文章目录 卸载apt-get 安装的PostgreSQL版本查找已安装的PostgreSQL包卸载PostgreSQL&#xff1a;检查并删除残留文件验证卸载 卸载apt-get 安装的PostgreSQL版本 卸载通过apt-get安装的PostgreSQL 就版本&#xff0c;可以按照以下步骤进行。 查找已安装的PostgreSQL包 在卸…...

低代码用户中心:构建高效便捷的用户管理平台

什么是低代码用户中心&#xff1f; 低代码用户中心是一种利用低代码开发平台构建的用户管理系统&#xff0c;允许企业快速创建、部署和管理用户信息、权限及互动记录。通过可视化界面和预置组件&#xff0c;企业可以在短时间内实现灵活的用户管理解决方案&#xff0c;而无需编…...

3款免费的GPT类工具

前言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;的崛起与发展已经成为我们生活中不可或缺的一部分。它的出现彻底改变了我们与世界互动的方式&#xff0c;并为各行各业带来了前所未有的便利。 一、Kimi 网址&#xff1a;点我前往 国产AI模型Kimi是一…...

Mixture-of-Experts (MoE): 条件计算的诞生与崛起【上篇】

大型语言模型&#xff08;LLM&#xff09;的现代进步主要是缩放定律的产物[6]。 假设模型是在足够大的数据集上训练出来的&#xff0c;那么随着底层模型规模的增加&#xff0c;我们会看到性能的平滑提升。 这种扩展规律最终促使我们创建了 GPT-3 以及随后的其他&#xff08;更强…...

【算法】分治:归并排序之LCR 170.交易逆序对的总数(hard)

系列专栏 双指针 模拟算法 分治思想 目录 1、题目链接 2、题目介绍 3、解法 4、代码 1、题目链接 LCR 159. 库存管理 III - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 在股票交易中&#xff0c;如果前一天的股价高于后一天的股价&#xff0c;则可以认为存在一…...

2024.9.28 作业+思维导图

widget.cpp #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->setFixedSize(320,448);this->setWindowFlag(Qt::FramelessWindowHint);//QPushButtonQPushButton *PushButton1 new QPushButton("登录",this);PushButto…...

树莓派外挂Camera(基操)(TODO)

&#xff08;TODO&#xff09; 手上有OV5647&#xff0c;OV2640&#xff0c;看这次能不能驱动吧。。。 树莓派3B CSI摄像头配置-阿里云开发者社区 你可以使用树莓派3B的CSI接口连接相机模块。首先&#xff0c;确保相机模块正确连接到CSI接口。然后&#xff0c;使用raspi-config…...

讯飞星火编排创建智能体学习(二)决策节点

目录 概述 决策节点 文生图节点 连接节点 测试结果 概述 在上一篇博文讯飞星火编排创建智能体学习&#xff08;一&#xff09;最简单的智能体构建-CSDN博客&#xff0c;我介绍了编排创作智能体&#xff0c;这篇来介绍一下“决策节点”。 决策节点 在编排创作智能体中&…...

YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU

💡💡💡现有IoU问题点:IoU (Intersection over Union)作为模型训练的关键,极大地显示了当前预测框与Ground Truth框之间的差异。后续研究者不断在IoU中加入更多的考虑因素,如中心距离、纵横比等。然而,仅仅提炼几何差异是有上限的;而且新的对价指数与借据本身存在潜在…...

力扣 简单 112.路径总和

文章目录 题目介绍题解 题目介绍 题解 class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {// 只在最开始的时候判断树是否为空if (root null) {return false;}targetSum - root.val;if (root.left null && root.right null) { // root 是…...

OpenMV与STM32通信全面指南

目录 引言 一、OpenMV和STM32简介 1.1 OpenMV简介 1.2 STM32简介 二、通信协议概述 三、硬件连接 3.1 硬件准备 3.2 引脚连接 四、软件环境搭建 4.1 OpenMV IDE安装 4.2 STM32开发环境 五、UART通信实现 5.1 OpenMV端编程 5.2 STM32端编程 六、SPI通信实现 6.1 …...

Python库matplotlib之二

Python库matplotlib之二 figureAxessubplot figure matplotlib.pyplot.figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue, FigureClass<class ‘matplotlib.figure.Figure’>, clearFalse, **kwargs) num&#xff0c;int 或 str 或 fi…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...