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

常见LeetCode-Saw200

用来记录需要知道见过的题型:

LeetCode2-两数相加
说明:以链表的形势给了你每个位的数字,而且是逆序,直接从开头(个位)遍历相加。带上进位即可。有一个为空就直接计算另一个和进位。
LeetCode-3.无重复字符的最长子串
说明不清楚,要求从字符

串总能截取一个子串,要求这个子串中没有出现重复的元素。求子串的最大可能长度。
解题思路:一开始想到的就是和股票收益是一个类题型,每次判断当期那元素是否出现在当前字符串中,如果出现就归零否则,长度加一。后来发现,这是不对的,如果出现过,需要找到他出现的位置,从那里重新截取得到字符串,而不是直接归零。
更优解题思路:滑动窗口,用一个队列来记录当前队列,每次新元素如果没见过就谈入,如果见过就一直弹(leftpop)到没见过。
LeetCode5-最长回文子串
二维动态规划。核心:新增的这个元素是有是否是回文:上一次也是回文,且,此元素和对称位置相等。
但是我相同以为动态规划来解题,有机会试试,这应该是当做二维dp的基础例题。
leetCode6-Z字变形
直接新建N个数组,每个数组用来存储第1,2,3...行,遍历提供的数组,按照蛇形进行append到不同的行。(类似于正态分布!!!)
LeetCode7-整数反转
【这种最好就是按照字符串来!!!!!!】。开头为0的情况再最后处理。训练条件为剩下的字符串还有长度(而不是余数大于0)
LeetCode11-盛水最多的容器(简单半接雨水)
其实也和股票最大值一样,也是需要用双指针从两端开始遍历,记录历史最大成水量。移动两边中较短的那个。
Leetcode15-三数之和(三数之和为0的所有三元组的value情况,输出value的组合)
解题思路先排序,再执行n次求两数之和(外层训练从头到尾,内层使用双指针,从两边到中间。)
LeetCode16-最接近的三数之和(从数组中选出最接近x的三元组,ps假定每组输入只存在恰好一个解)
解题思路:排序+执行n次双指针。
LeetCode17-电话号码的字母组合(给一个包含2~9的数字,返回其所有组合。)
解题思路:往里面放入第一个,后续每次弹出一个元素,再放入这个所有产生的组合。
LeetCode18-四数之和
解题思路:就是在加一层for循环。
LeetCode19-删除链表的倒数第 N 个结点
题解:双指针,一个比两一个游标多走n步。然后一起遍历到前面指针到头,此时删除慢指针节点。
LeetCode22-括号生成(生成有效括号的所有可能)
题解:使用递归,n对括号。一个记录left的个数,一个记录目前right的个数。当前left+right=len(S),一个可能的结果就造好了就可以append进去了。
说明:带回溯功能的递归(所谓回溯 某个符号可以是左括号,我就所有当前元素是左括号的可能递归append完。然后再pop出来,继续实现“假如当前是右括号”的逻辑)
LeetCode24-两两交换链表中的节点
题解:一开始是想以两个游标来做。
LeetCode29-两数相除(重点)
题解:以2倍递增
LeetCode31-下一个排列(可以做一下)
题解:找下一个能产生的排列。从右侧找一个尽可能小数的大数与右侧数进行交换。如果没有找到则返回数组的升序。
LeetCode33-搜索旋转排序数组(遇到过,有机会把地中方案再写一次。)
题解:方案一:之前面试是先找翻转的位置,确定翻转点,再进行二分查找。这种不容易错!!
方案二:将数组一分为二。(其中有一个一定是有序的;另一个则是有序或部分有序的)此时如果target在有序部分里,改用二分法进行查找。否则进入无序部分继续递归调用。

LeetCode34-在排序数组中查找元素的第一个和最后一个位置

// 两次二分查找,分开查找第一个和最后一个。时间 O(log n), 空间 O(1)// [1,2,3,3,3,3,4,5,9]public int[] searchRange2(int[] nums, int target) {int left = 0;int right = nums.length - 1;int first = -1;int last = -1;    // 找第一个等于target的位置while (left <= right) {int middle = (left + right) / 2;if (nums[middle] == target) {first = middle;right = middle - 1; //重点} else if (nums[middle] > target) {right = middle - 1;} else {left = middle + 1;}}left = 0;     // 最后一个等于target的位置right = nums.length - 1;while (left <= right) {int middle = (left + right) / 2;if (nums[middle] == target) {last = middle;left = middle + 1; //重点} else if (nums[middle] > target) {right = middle - 1;} else {left = middle + 1;}}return new int[]{first, last};}

题解:使用二分法变体,一次查找查找左边界和右边界。二分法之前是如果等于target就返回,二分法变体(找第一个边界)是如果等于target就记下来,继续调整边界直到边界不存在

LeetCode36-有效的数独(判断一个矩阵是否是数独)

题解:需要新建3个变量,然后从左上角,开始遍历即可。 3个变量(2个二维数组+1个三维数组)分别记录着:每行遇到的每个数出现的次数、每列每个数出现的次数、每个3*3小方块数字出现的次数。如果不为空就更新这三个变量,每次检测 行、列、所在小方块 这个元素后,是否满足规则。(推荐看一下代码图,一眼就懂)

def isValidSudoku(board):rows = [[0] * 9 for _ in range(9)]columns = [[0] * 9 for _ in range(9)]subboxes = [[[0] * 9 for _ in range(3)] for _ in range(3)]for i in range(9):for j in range(9):c = board[i][j]if c != '.':index = int(c) - 1rows[i][index] += 1columns[j][index] += 1subboxes[i // 3][j // 3][index] += 1if rows[i][index] > 1 or columns[j][index] > 1 or subboxes[i // 3][j // 3][index] > 1:return Falsereturn True
board =[["8","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]]
s = isValidSudoku(board) #False
print(s)

LeetCode38-外观数列(‘外观’是指每次迭代f(x)做的事情是描述上一项结果,输出新结果)

和菲波那切数列很像(这个是由前一项得到,斐波那契是由前两项得到)。

前两个数是特征情况,把第2个数当做初始状态,从第3个数开始项开始迭代,依次计算得到3,4,5...n项的输出,得到结果后就继续把结果当做已知条件进行下一次迭代。直到n再输出。

LeetCode39-组合总和(列举取数组中和为target的所有组合)

个人思路:想搬数组分成两类,基础元素和非基础元素(能由其他元素组成),先计算target能有多少基础元素组合。回溯法应该也是必备

解题思路:搜索回溯???

LeetCode49-字母异位词分组(把字符串数组分组,同一组的字符串的每个字母次数相同)

个人理解:这个题一旦把异位词换成括号的说法就明朗很多。

排序法:所有异位词排序后结果是相同的,对所有元素排序,key当做排序后结果,value是异位词list。时间复杂度:O(nklogk)  k是子字符串长度。

哈希法:把每个词转成26位数字的数组,元素值为改元素初见的次数。拼成一个key后当做key,value是异位词list。空间复杂度: O(n(k+26))

def groupAnagrams(self, strs: List[str]) -> List[List[str]]:mp = collections.defaultdict(list)for st in strs:counts = [0] * 26for ch in st:counts[ord(ch) - ord("a")] += 1# 需要将 list 转换成 tuple 才能进行哈希mp[tuple(counts)].append(st)return list(mp.values())

LeetCode56-合并区间(合并多个子数组的区间)

def merge(self, intervals: List[List[int]]) -> List[List[int]]:res = []intervals = sorted(intervals)current_array = intervals[0]for array in intervals[1:]:if array[0]<=current_array[1]:current_array = [current_array[0],max(array[1],current_array[1])]else:res.append(current_array)current_array = arrayres.append(current_array) #注意别忘了return  res示例:输入[[1,3],[2,6],[8,10]]  ->  输出[[1,6],[8,10]]

说明:这个题是真贱,是否有序也不说。由于可能出现[[2,5],[1,4]],需要先按第一个元素排序。然后把第一个数组拿出来,从左向右合并(要么调整cur_array边界,要么append再重置cur_array)。最后别忘了把cur_array再append进去。

LeetCode57-插入区间(把一个区间插入(合并)到一个有序且不重叠的区间数组中)

这个题只会插入一次。①先找到要插入的位置,②开始修改待插入、合并的左右边界。直到右侧不连续③把右侧剩下的元素放进来。 当然也可以用二分查找寻找边界。  这个题主要是分成【找插入位置,定插入边界、追加剩下元素】三步。需要left和right变量。注意这个题可以直接append进去然后用56题来解🤣只背56,能解两道题。

def insert(intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:res = list()left = newInterval[0]right = newInterval[1]index = 0while index < len(intervals) and intervals[index][1] < left:res.append(intervals[index])index += 1while index < len(intervals) and (intervals[index][0] <= right):left = min(left, intervals[index][0])right = max(right, intervals[index][1])index += 1res.append([left, right])while index < len(intervals):res.append(intervals[index])index += 1return res

LeetCode77-组合(从[1,n]中无放回抽取k个数))

说明:回溯法的入门必备题,题目非常简单,但是透露着杀气。

def combine(self, n: int, k: int) -> List[List[int]]:res =[]def backtrack(l,r,k,cur_array):if len(cur_array)==k: # 先写递归终止条件res.append(list(cur_array))returnfor i in range(l,n+1):cur_array.append(i)backtrack(i+1,n,k,cur_array)cur_array.pop()backtrack(1,n,k,[])return res
  • 回溯法的四个参数意思:①所有可以加入元素的左边界 ②所有可以加入元素的右边界 ③ 终止条件(期望的数组长度) ④当前结果。
  • 回溯法采用递归,先写递归的终止条件,注意是新建一个list放进去。
  • 回归法由两部分组成:【终止条件】+【把当前可能元素放到当前结果再继续递归】(三步)

!LeetCode94-二叉树中序遍历(左中右)

记录:中序可用递归、栈;递归需要新建一个全局变量;

def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res  = []        def my_fun(root):if root is None:passelif root.left is None:res.append(root.val)my_fun(root.right)else:my_fun(root.left)res.append(root.val)my_fun(root.right)my_fun(root)return res

解题思路:本来想直接递归调用自己,但是发现必须有一个全局的数组,因此只能新建一个全局变量,然后递归去append。(半夜写出来的,耗时秒杀100%,树的问题都优先用递归解决

LeetCode100:相同的树
题解:直接递归; 如果不让用递归的话,就先判断当前节点,如果没有就吧子树放到list中。这样两个树遍历是一样的。遇到不相同的就直接返回了。
Leetcode129-求根节点到叶节点数字之和
题目描述不清晰,应该是所有到叶子节点按位组成的数字的和。肯定是递归,就是把所有子树*10+当前树。
LeetCode103-二叉树的锯齿形层序遍历
给了你数组了。直接for循环,每次计算出当前层的个数和是奇偶性,然后进行打印。
 

相关文章:

常见LeetCode-Saw200

用来记录需要知道见过的题型&#xff1a; LeetCode2-两数相加 说明&#xff1a;以链表的形势给了你每个位的数字&#xff0c;而且是逆序&#xff0c;直接从开头&#xff08;个位&#xff09;遍历相加。带上进位即可。有一个为空就直接计算另一个和进位。 LeetCode-3.无重复字符…...

Unity 制作一个视频播放器(打包后,可在外部编辑并放置新的视频)

效果展示&#xff1a; 在这里&#xff0c;我把视频名称&#xff08;Json&#xff09;和对应的视频资源都放在了StreamingAssets文件夹下&#xff0c;以便于打包后&#xff0c;客户还可以自己在外部增加、删除、修改对应的视频资料。 如有需要&#xff0c;请联细抠抠。...

MySQL-SQL语句

文章目录 一. SQL语句介绍二. SQL语句分类1. 数据定义语言&#xff1a;简称DDL(Data Definition Language)2. 数据操作语言&#xff1a;简称DML(Data Manipulation Language)3. 数据查询语言&#xff1a;简称DQL(Data Query Language)4. 数据控制语言&#xff1a;简称DCL(Data …...

腾讯微信大数据面试题及参考答案

DNS 协议是否使用 UDP? DNS(Domain Name System)协议主要使用 UDP(User Datagram Protocol),但也会使用 TCP(Transmission Control Protocol)。 UDP 是一种无连接的传输协议,它的特点是简单、高效。DNS 在进行域名解析时,大部分情况下使用 UDP。因为 UDP 的开销小,对…...

Python跳动的爱心

系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…...

计算机启动过程 | Linux 启动流程

注&#xff1a;本文为“计算机启动、 Linux 启动”相关文章合辑。 替换引文部分不清晰的图。 探索计算机的启动过程 Aleksandr Goncharov 2023/04/21 很多人对计算机的启动方式很感兴趣。只要设备开启&#xff0c;这就是魔法开始和持续的地方。在本文中&#xff0c;我们将概…...

反射简单介绍

反射就是从类里拿东西 有的人可能会想为什么不能用io流&#xff0c;从上往下一行一行的读也能获取类中的信息&#xff0c;为什么要用反射呢&#xff1f; 假如我们io流&#xff0c;从左到右一行一行的读取数据&#xff0c;如果碰到局部变量和成员变量同名&#xff0c;怎么区分&a…...

工具篇--GitHub Desktop 使用

文章目录 前言一、GitHub Desktop 的使用&#xff1a;1.1 通过官网下载GitHub Desktop和安装&#xff1a;1.2 安装和使用&#xff1a;1.2.1 填充自己的标识&#xff1a;1.2.3 克隆项目&#xff1a;1.2.4 git 常用忽略项配置&#xff1a; 二、代码的更新和提交&#xff1a;2.1 代…...

单臂路由配置

知识点 单臂路由指在路由器上的一个接口配置子接口&#xff08;逻辑接口&#xff09;来实现不同vlan间通信 路由器上的每个物理接口都可以配置多个子接口&#xff08;逻辑接口&#xff09; 公司的财务部、技术部和业务部有多台计算机&#xff0c;它们使用一台二层交换机进行互…...

河工oj第七周补题题解2024

A.GO LecturesⅠ—— Victory GO LecturesⅠ—— Victory - 问题 - 软件学院OJ 代码 统计 #include<bits/stdc.h> using namespace std;double b, w;int main() {for(int i 1; i < 19; i ) {for(int j 1; j < 19; j ) {char ch; cin >> ch;if(ch B) b …...

卷积的数学原理与作用

一、一维卷积 &#xff08;一&#xff09;定义 数学定义 给定一个输入序列 x [ x 1 , x 2 , ⋯ , x n ] x [x_1,x_2,\cdots,x_n] x[x1​,x2​,⋯,xn​] 和一个卷积核&#xff08;滤波器&#xff09; k [ k 1 , k 2 , ⋯ , k m ] k [k_1,k_2,\cdots,k_m] k[k1​,k2​,⋯,…...

路由介绍.

RIB和FIB Routing Information Base&#xff08;RIB&#xff09;&#xff0c;即路由信息库&#xff0c;是存储在路由器或联网计算机中的一个电子表格或类数据库&#xff0c;它保存着指向特定网络地址的路径信息&#xff0c;包括路径的路由度量值。RIB的主要目标是实现路由协议…...

CTFshow-命令执行(Web29-40)

CTFshow-命令执行(Web29-40) CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤-CSDN博客 总结rce&#xff08;远程代码执行各种sao姿势&#xff09;绕过bypass_远程命令执行绕过-CSDN博客 对比两者的源代码&#xff0c;我们发现&#xff0c;cat指令把flag.php的内容导出后依…...

MySQL锁的类型有哪些

目录 共享锁(share lock)&#xff1a; 排他锁(exclusivelock)&#xff1a; 表锁(table lock)&#xff1a; 行锁&#xff1a; 记录锁(Record lock)&#xff1a; 页锁&#xff1a; 间隙锁&#xff1a; 基于锁的属性分类&#xff1a;共享锁&#xff0c;排他锁。 基于锁的粒…...

基于 JNI + Rust 实现一种高性能 Excel 导出方案(下篇)

衡量一个人是否幸福&#xff0c;不应看他有多少高兴的事&#xff0c;而应看他是否为小事烦扰。只有幸福的人&#xff0c;才会把无关痛痒的小事挂心上。那些真正经历巨大灾难和深重痛苦的人&#xff0c;根本无暇顾及这些小事的。因此人们往往在失去幸福之后&#xff0c;才会发现…...

关于Python程序消费Kafka消息不稳定问题的处理方法

在使用Python程序消费Kafka消息的过程中&#xff0c;有时会遇到各种不稳定的情况&#xff0c;如自动提交偏移量无效、CommitFailedError错误等。这些问题不仅影响了数据处理的可靠性&#xff0c;还可能导致重复消费或丢失消息。本文将针对这两个常见问题提供详细的解决方案和最…...

【OpenCV】Canny边缘检测

理论 Canny 边缘检测是一种流行的边缘检测算法。它是由 John F. Canny 在 1986 年提出。 这是一个多阶段算法&#xff0c;我们将介绍算法的每一个步骤。 降噪 由于边缘检测易受图像中的噪声影响&#xff0c;因此第一步是使用 5x5 高斯滤波器去除图像中的噪声。我们在前面的章…...

算法-二进制和位运算

一.二进制 &#xff08;1&#xff09;.无符号数&#xff1a; 无符号数是一种数据表示方式&#xff0c;它只表示非负整数&#xff0c;即没有符号位&#xff0c;所有的位都用来表示数值大小。在 C 等编程语言中&#xff0c;常见的无符号类型有 unsigned int、unsigned char 等。…...

OpenAI Chatgpt 大语言模型

OpenAI 一个美国人工智能研究实验室&#xff0c;由非营利组织 OpenAI Inc&#xff0c;和其营利组织子公司 OpenAI LP 所组成。该组织于 2015 年由萨姆阿尔特曼、里德霍夫曼、杰西卡利文斯顿、伊隆马斯克、伊尔亚苏茨克维、沃伊切赫萨伦巴、彼得泰尔等人在旧金山成立&#xff0…...

SpringBoot【九】mybatis-plus之自定义sql零基础教学!

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE mybatis-plus的基本使用&#xff0c;前两期基本讲的差不多&#xff0c;够日常使用&#xff0c;但是有的小伙伴可能就会抱怨了&#xff0c;若是遇到业务逻辑比较复杂的sq…...

C#,人工智能,深度学习,目标检测,OpenCV级联分类器数据集的制作与《层级分类器一键生成器》源代码

一、目标识别技术概述 1、摘要 目标检测是计算机视觉中最基本和最具挑战性的问题之一&#xff0c;它试图从自然图像中的大量预定义类别中定位目标实例。深度学习技术已成为直接从数据中学习特征表示的强大策略&#xff0c;并在通用目标检测领域取得了显著突破。鉴于这一快速发…...

调度系统:Luigi 的主要特性和功能

Luigi 是一个开源的 Python 工作流管理工具&#xff0c;用于构建批处理作业管道&#xff0c;特别适用于数据工程领域。它被设计用来编排任务和处理任务间的依赖关系&#xff0c;支持自动化复杂的 ETL 流程、数据分析、模型训练等任务。 Luigi 的主要特性和功能&#xff1a; 任…...

C# 探险之旅:第二节 - 定义变量与变量赋值

欢迎再次踏上我们的C#学习之旅。今天&#xff0c;我们要聊一个超级重要又好玩的话题——定义变量与变量赋值。想象一下&#xff0c;你正站在一个魔法森林里&#xff0c;手里拿着一本空白的魔法书&#xff08;其实就是你的代码编辑器&#xff09;&#xff0c;准备记录下各种神奇…...

AUTOSAR:SOME/IP 概念

文章目录 1. 用例与需求1.1 典型用例1.2 对中间件的要求 2. 协议栈示例3. SOME/IP 概念3.1 中间件整体功能与架构3.2 服务组成元素详细解释 4. 服务发现机制深入剖析5. 总结 1. 用例与需求 1.1 典型用例 信息娱乐系统&#xff1a; 后座娱乐系统连接&#xff1a;允许后排乘客连…...

循序渐进kubenetes Service(Cluster ip、Nodeport、Loadbalancer)

文章目录 部署一个web服务Kubernetes Port ForwardKubernetes ServicesClusterIP ServiceNodePort ServiceLoadBalancer Service 部署一个web服务 准备 Kubernetes 集群后&#xff0c;创建一个名为 web 的新 namespace&#xff0c;然后在该 namespace 中部署一个简单的 web 应…...

深入理解 Apache Shiro:安全框架全解析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…...

mac 安装CosyVoice (cpu版本)

CosyVoice 介绍 CosyVoice 是阿里研发的一个tts大模型 官方项目地址&#xff1a;https://github.com/FunAudioLLM/CosyVoice.git 下载项目&#xff08;非官方&#xff09; git clone --recursive https://github.com/v3ucn/CosyVoice_for_MacOs.git 进入项目 cd CosyVoic…...

币安移除铭文市场的深度解读:背后原因及其对区块链行业的影响

引言&#xff1a; 就在昨天&#xff0c;2024年12月10号&#xff0c;币安宣布将移除铭文市场&#xff08;Inscriptions Market&#xff09;。这一消息引发了全球加密货币社区的广泛关注&#xff0c;尤其是在比特币NFT和数字收藏品市场快速发展的背景下。铭文市场自诞生以来迅速…...

深度学习实战野生动物识别

本文采用YOLOv11作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对野生动物数据集进行训练和优化&#xff0c;该数据集包含丰富的野生动物图像样…...

windows安装使用conda

在Windows系统上安装和使用Conda的详细步骤如下&#xff1a; 一、下载Conda安装包 访问Conda的官方网站Anaconda | The Operating System for AI&#xff0c;点击“Downloads”按钮。在下载页面&#xff0c;选择适合您系统的安装包。通常&#xff0c;对于Windows系统&#xf…...

手机网站有什么区别是什么意思/成都seo技术经理

巧用sessionStorage切换layui的操作按钮 最近用layui做了一个项目&#xff0c;其中有个模块就是切换layui的操作按钮&#xff0c;因为第一次用layui不大熟&#xff0c;慢慢调试终于搞出来&#xff0c;到达任意切换的效果。 【1】其他那些表格数据绑定就不写了&#xff0c;直接进…...

做装修公司网站/一台电脑赚钱的门路

目录.NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中前言笔者最近在开发和维护一个.NET Core项目&#xff0c;其中使用几个非常有意思的.NET Core相关的扩展&#xff0c;在此总结整理一下。EF Core性能调优如果你的项目中使用了EF Core, 且正在处于性能调优阶段…...

国家备案网查询系统/济南seo的排名优化

show status;show processlist...

绿色在线网站/服务营销的七个要素

...

东营网站制作团队/网络营销策划的方法

在学习完了SQL注入的原理、SQL注入的类型后那么可以说SQL注入已经大致了解了&#xff0c;但事实是现实中开发人员不可能让你这么简单就攻击到数据库&#xff0c;他们一般会对已输入或可输入的数据做一定限制&#xff0c;这篇文章我主要对SQL注入中代码或者waf过滤的绕过做一次总…...

如何做视频网站流程图/国外免费推广平台有哪些

1 volatile的特性 当我们声明共享变量为volatile后&#xff0c;对这个变量的读/写将会很特别。理解volatile特性的一个好方法是&#xff1a;把对volatile变量的单个读/写&#xff0c;看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明&…...