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

LeetCode 热题 HOT 100 Java 题解 -- Part 3

练习地址

Part 1 : https://blog.csdn.net/qq_41080854/article/details/128829494

Part 2 : https://blog.csdn.net/qq_41080854/article/details/129278336

LeetCode 热题 HOT 100 Java 题解 -- Part 3

    • 76. 最佳买卖股票时机含冷冻期
    • 77. 戳气球
    • 78. 零钱兑换
    • 79. 打家劫舍 III
    • 80. 比特位计数
    • 81. 前 K 个高频元素
    • 82. 字符串解码
    • 83. 除法求值
    • 84. 根据身高重建队列
    • 85. 分割等和子集
    • 86. 路径总和 III

76. 最佳买卖股票时机含冷冻期

给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

解析

dp[i] 表示 第 i 天的最大收益,由两个状态决定dp[i] = Max(dp[i, 0],dp[i, 1]), dp[i, 0] 表示当天没有股票,dp[i, 1]表示当天有股票

dp[i, 0] = Max(dp[i - 1, 1] + price[i], dp[i - 1, 0]) 当天没有股票由今天卖的昨天就没有决定,需要注意先有才能卖

dp[i, 1] = Max(dp[i - 2, 0] - price[i], dp[i - 1, 1]) 当天有股票由今天买的(有冷冻期限制)昨天就有决定,需要注意先没有才能买

代码

class Solution {public int maxProfit(int[] prices) {if(prices == null || prices.length == 0) return 0;//dp[i][0] 第i天没有股票 dp[i][1] 第 i 天有股票int[][] dp = new int[prices.length][2];dp[0][0] = 0;dp[0][1] = -prices[0];for(int i =  1; i < prices.length; i++){dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + prices[i]);dp[i][1] = Math.max(dp[i - 1][1], ((i - 2) >= 0 ? dp[i - 2][0] : 0) - prices[i]);}return Math.max(dp[prices.length - 1][0], dp[prices.length - 1][1]);}
}

77. 戳气球

有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。

现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。

求所能获得硬币的最大数量。

示例 1:
输入:nums = [3,1,5,8]
输出:167
解释:
nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> []
coins = 315 + 358 + 138 + 181 = 167

解析

固定DP区间,而不固定爆破的气球,dp[i][j] 表示 i 到 j 之间能获得最大金币,不包括i,j边界(戳爆中间,两段不戳爆)

0<= i < k < j <=n + 1 符合这样的位置关系,只管最后一个戳爆的气球!k是最后一个戳爆的气球,分治思想dp[i][k]前半部分,dp[k][j]后半部分

class Solution {public int maxCoins(int[] nums) {int n = nums.length;int[] helper = new int[n + 2];// 固定区间,而不固定爆破的气球// dp[i][j] 表示 i 到 j 之间能获得最大金币,不包括i,j边界,戳爆中间,两段不戳爆int[][] dp = new int[n + 2][n + 2];helper[0] = helper[n + 1] = 1;for(int i = 1; i < n + 1; i++){helper[i] = nums[i - 1];}// 0<= i < k < j <=n + 1 符合这样的位置关系,从后往前戳破气球!for(int i = n - 1; i >= 0; i--){for(int j = i + 2; j < n + 2; j++){for(int k = i + 1; k < j; k++){//k是最后一个戳爆的气球int sum = helper[i] * helper[k] * helper[j];sum += dp[i][k] + dp[k][j];dp[i][j] = Math.max(dp[i][j], sum);}}}return dp[0][n + 1];}
}

78. 零钱兑换

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。

示例 1:

输入:coins = [1, 2, 5], amount = 11
输出:3
解释:11 = 5 + 5 + 1

解析

完全背包

代码

class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount + 1];// dp[i] 金额 i所需的最少硬币Arrays.fill(dp, amount + 1);dp[0] = 0;//0 元 0 种for(int i = 0; i < coins.length; i++){//先遍历硬币,物品for(int j = coins[i]; j < amount + 1; j++){//遍历金额,容量dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1); }}return dp[amount] == amount + 1 ? -1 : dp[amount];}
}

79. 打家劫舍 III

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。

除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。

给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。

输入: root = [3,2,3,null,3,null,1]
输出: 7 
解释: 小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7

解析

使用后序遍历,对于根的计算分为打劫和不打劫两种

class Solution {public int rob(TreeNode root) {if(root == null) return 0;int[] res = dfs(root);//int[0] 表示不打劫,int[1] 表示打劫return Math.max(res[0], res[1]);}private int[] dfs(TreeNode node){if(node == null) return new int[]{0, 0};//后序遍历int[] left = dfs(node.left);int[] right = dfs(node.right);int[] res = new int[2];//不打劫当前节点res[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);//打劫当前节点res[1] = node.val + left[0] + right[0];return res;}
}

80. 比特位计数

给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。

示例 1:

输入:n = 2
输出:[0,1,1]
解释:
0 --> 0
1 --> 1
2 --> 10
示例 2:

输入:n = 5
输出:[0,1,1,2,1,2]
解释:
0 --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101

解析

对于任何整数都有, x = x &(x - 1),最后一位的1变为0,然后计数

代码

class Solution {public int[] countBits(int n) {//res[i] 第i个有多少个1int[] res = new int[n + 1];for(int i = 0; i < n + 1; i++){int count = 0;int temp = i;while(temp != 0){count++;temp = temp & (temp - 1);//将最后一个位从1变为0}res[i] = count;}return res;}
}

81. 前 K 个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:

输入: nums = [1], k = 1
输出: [1]

解析

在这里,我们可以利用堆的思想:建立一个大顶堆,然后遍历「出现次数数组」

class Solution {public int[] topKFrequent(int[] nums, int k) {int[] res = new int[k];Map<Integer, Integer> map = new HashMap<>();for(int num : nums){map.put(num, map.getOrDefault(num, 0) + 1);}//大根堆PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> map.get(y) - map.get(x));for(Integer key : map.keySet()){pq.offer(key);}for(int i = 0; i < k; i++){res[i] = (int)pq.poll();}return res;}
}

82. 字符串解码

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例 1:

输入:s = “3[a]2[bc]”
输出:“aaabcbc”

解析

双栈

class Solution {public String decodeString(String s) {// 栈Stack<Integer> stack = new Stack<>();// 临时结果栈Stack<StringBuilder> temp = new Stack<>();temp.push(new StringBuilder());// 字符串长度、当前的乘数int len = s.length(), mul = 0;for (int i=0; i<len; i++) {char c = s.charAt(i);if (c >= '0' && c <= '9') {// 是数字,则累计mul = mul * 10 + (c - '0');} else if (c == '[') {// 遇到左边框,新增一个临时过程stack.push(mul);temp.push(new StringBuilder());mul = 0;} else if (c == ']') {// 遇到右边框,处理临时过程到上一个临时过程StringBuilder t = temp.pop();temp.peek().append(t.toString().repeat(stack.pop()));} else {// 遇到字符串,拼接到当前的临时过程temp.peek().append(c);}}return temp.pop().toString();}
}

83. 除法求值

给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。

另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。

返回 所有问题的答案 。如果存在某个无法确定的答案,则用 -1.0 替代这个答案。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用 -1.0 替代这个答案。

注意:输入总是有效的。你可以假设除法运算中不会出现除数为 0 的情况,且不存在任何矛盾的结果。

示例 1:

输入:equations = [[“a”,“b”],[“b”,“c”]], values = [2.0,3.0], queries = [[“a”,“c”],[“b”,“a”],[“a”,“e”],[“a”,“a”],[“x”,“x”]]
输出:[6.00000,0.50000,-1.00000,1.00000,-1.00000]
解释:
条件:a / b = 2.0, b / c = 3.0
问题:a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?
结果:[6.0, 0.5, -1.0, 1.0, -1.0 ]

解析

将其转换为图,并使用带权重的并查集来模拟

在这里插入图片描述

代码

class Solution {public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {UnionFind union = new UnionFind();int i = 0;for(List<String> eq: equations){String a = eq.get(0);String b = eq.get(1);double value = values[i++];union.union(a, b, value);}double[] res = new double[queries.size()];i = 0;for(List<String> query: queries){String x = query.get(0);String y = query.get(1);res[i++] = union.query(x, y);}return res;}//带权重的并查集private class UnionFind{private Map<String, String> parent;private Map<String, Double> weight;public UnionFind(){parent = new HashMap<>();weight = new HashMap<>();}public void union(String x, String y, double value){parent.putIfAbsent(x, x);parent.putIfAbsent(y, y);weight.putIfAbsent(x, 1.0d);weight.putIfAbsent(y, 1.0d);String xRoot = find(x);String yRoot = find(y);if (!xRoot.equals(yRoot)) {parent.put(xRoot, yRoot);weight.put(xRoot, weight.get(y) * value / weight.get(x));}}//找到根节点public String find(String x){if(!parent.get(x).equals(x)){String oldPatient = parent.get(x);parent.put(x, find(parent.get(x)));weight.put(x, weight.get(oldPatient) * weight.get(x));}return parent.get(x);}public double query(String x, String y) {if (!parent.containsKey(x) || !parent.containsKey(y)) {return -1.0d;}String xRoot = find(x);String yRoot = find(y);if (xRoot.equals(yRoot)) {return weight.get(x) / weight.get(y);} else {return -1.0d;}}}}

84. 根据身高重建队列

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

示例 1:

输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
解释:
编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。
编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。
编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。
编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。
编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。

解析

(套路):一般这种数对,还涉及排序的,根据第一个元素正向排序,根据第二个元素反向排序,或者根据第一个元素反向排序,根据第二个元素正向排序,往往能够简化解题过程。
本题先第一个元素逆序,然后第二个元素升序,接着插队

class Solution {public int[][] reconstructQueue(int[][] people) {//数组的第一个元素进行逆序,数组第二个元素正序Arrays.sort(people, (x, y) -> {if(x[0] == y[0]){return x[1] - y[1];//升序}else{return y[0] - x[0];//降序}});//再插队,根据下标k进行插队List<int[]> res = new ArrayList<>();for(int[] p : people){res.add(p[1], p);}return res.toArray(new int[res.size()][0]);}
}

85. 分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例 1:

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11] 。
示例 2:

输入:nums = [1,2,3,5]
输出:false
解释:数组不能分割成两个元素和相等的子集。

解析

0,1 背包问题

代码

class Solution {public boolean canPartition(int[] nums) {// 0 1背包问题int n = nums.length;int sum = 0; //统计nums的总数for(int num : nums){sum += num;}if(sum % 2 != 0) return false;int target = sum / 2;int[] dp = new int[target + 1];//dp[i] 表示第 i 个正整数的元素和// 0 1 背包模板for(int i = 0; i < n; i++) {for(int j = target; j >= nums[i]; j--) {// 重量和价值都为nums[i]dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]);}}return dp[target] == target;}
}

86. 路径总和 III

给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。

路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
在这里插入图片描述
输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出:3
解释:和等于 8 的路径有 3 条,如图所示

解析

先序递归遍历每个节点,再以每个节点作为起始点递归寻找满足条件的路径,双重递归

代码

class Solution {long path = 0;public int pathSum(TreeNode root, int targetSum) {//先序遍历每个结点,然后每个结点作为起始点递归查找if(root == null) return 0;sum(root, targetSum);pathSum(root.left, targetSum);pathSum(root.right, targetSum);return (int)path;}private void sum(TreeNode root, long targetSum){if(root == null) return;targetSum -= root.val;if(targetSum == 0) path++;sum(root.left, targetSum);sum(root.right, targetSum);}
}

相关文章:

LeetCode 热题 HOT 100 Java 题解 -- Part 3

练习地址 Part 1 : https://blog.csdn.net/qq_41080854/article/details/128829494 Part 2 : https://blog.csdn.net/qq_41080854/article/details/129278336 LeetCode 热题 HOT 100 Java 题解 -- Part 376. 最佳买卖股票时机含冷冻期77. 戳气球78. 零钱兑换79. 打家劫舍 III…...

QML键盘事件

在QML中&#xff0c;当有一个按键按下或释放时&#xff0c;会产生一个键盘事件&#xff0c;将其传递给获得有焦点的QML项目&#xff08;讲focus属性设置为true&#xff0c;则获得焦点&#xff09;。 按键处理的基本流程&#xff1a; Qt接收密钥操作并生成密钥事件。如果 QQuic…...

跨域问题怎么解决

解决跨域&#xff0c;原因&#xff1a;域名不同&#xff0c;域名相同端口不同&#xff1b;二级域名不同 什么是跨域&#xff1f; 就是两个项目之间通讯&#xff0c;如果访问的域名与ajax访问的地址不一致情况&#xff0c;默认情况浏览器有一个安全机制。 postman不一定能测试…...

微服务网关Gateway和Zuul的区别

spring-cloud-Gateway是spring-cloud的一个子项目。而zuul则是netflix公司的项目&#xff0c;只是spring将zuul集成在spring-cloud中使用而已。 因为zuul2.0连续跳票和zuul1的性能表现不是很理想&#xff0c;所以催生了spring团队开发了Gateway项目。 Zuul&#xff1a; 使用的…...

专访华西二院吴邦华:隐私计算+AI全栈技术,构筑智慧医院建设的坚实数据底座|爱分析访谈

从IT时代步入DT时代&#xff0c;医疗大数据成为智慧医院建设的重要驱动力。经过多年信息化系统建设&#xff0c;很多医院已经积累了大量的医疗数据资源&#xff0c;但由于各业务系统间数据孤岛化严重、系统架构落后、数据缺乏深度治理等问题存在&#xff0c;导致现有数据深度及…...

《C++ Primer Plus》第18章:探讨 C++ 新标准(6)

可变参数模板 可变参数模板&#xff08;variadic template&#xff09;让您能够创建这样的模板函数和模板类&#xff0c;即可接收可变数量的参数。这里介绍可变参数模板函数。例如&#xff0c;假设要编写一个函数&#xff0c;它可接受任意数量的参数&#xff0c;参数的类型只需…...

.Net Core中使用是SQL Server的邮件发送功能

.Net Core中使用是sqlserver的邮件发送功能准备需求启用SQL Server的电子邮件功能检查和测试在.net Core中调用在sqlsrver的管理中有一个数据库邮件功能,再此可以使用sqlserver来自动发送一些邮件,但是有一些需要插入附件的邮件则需要使用程序代码来解决,下面就是使用C#来调用s…...

Nginx优化服务和防盗链

Nginx优化服务和防盗链一、长连接1、修改主配置文件2、测试3、在主配置文件添加4、验证二、Nginx第三方模块1、开源的echo模块2、查看是否成功3、加echo模块步骤4、网页测试验证三、搭建虚拟主机1、编译安装好nginx后&#xff0c;对主配置文件进行修改2、创建文件3、验证四、防…...

B树与B+树

认识了解MySQL中的B树B树引出什么是B树什么是B树B树的优点B树引出 在MySQL中,如果我们设置了主键, 那么对于该列表中的数据就有了一个索引,插入表中数据的主键值不能重复,而且不能为空. 那当我们插入数据的时候, 它是如何通过索引来判断主键值是否重复的呢? 我们想到它肯定是…...

QEMU网络配置

文章目录1. 前言2. 测试环境3. 配置步骤3.1 host 配置3.1.1 检查 host 对 TUN/TAP 和 网桥的支持情况3.1.2 网桥一端的建立&#xff1a;创建网桥设备&#xff0c;并添加 host 网卡到网桥3.1.3 网桥另一端的建立&#xff1a;TUN/TAP 配置3.2 guest 端的配置4. 参考链接1. 前言 …...

windows安装tomcat

这里写自定义目录标题tomcat官网下载安装包并解压环境变量配置启动tomcat访问http://localhost:8080/修复启动出现乱码问题tomcat官网下载安装包并解压 环境变量配置 系统环境变量新增&#xff1a; 变量名&#xff1a;CATALINA_HOME 变量值&#xff1a;tomcat的安装目录 编辑…...

刷题记录:牛客NC23051华华和月月种树 树链剖分+离线加点

传送门:牛客 题目描述: 华华看书了解到&#xff0c;一起玩养成类的游戏有助于两人培养感情。所以他决定和月月一起种一棵树。因为华华现在也是信息学高手了&#xff0c;所以他们种的树是信息学意义下的。 华华和月月一起维护了一棵动态有根树&#xff0c;每个点有一个权值。刚…...

年薪20W软件测试工程师必备的6大技能(建议收藏)

软件测试 随着软件开发行业的日益发展&#xff0c;岗位需求量和行业薪资都不断增长&#xff0c;想要入行的人也是越来越多&#xff0c;但不知道从哪里下手&#xff0c;今天&#xff0c;就给大家分享一下&#xff0c;软件测试行业都有哪些必会的方法和技术知识点&#xff0c;作…...

【存储】RAID2.0+、多路径技术、磁盘可靠性技术

RAID2.0RAID 2.0技术RAID技术发展RAID 2.0软件逻辑对象RAID 2.0基本原理硬盘域Storage Pool & TierDisk Group&#xff08;DG&#xff09;LD&#xff08;逻辑磁盘&#xff09;Chunk&#xff08;CK&#xff09;Chunk Group&#xff08;CKG&#xff09;ExtentGrainVolume &am…...

Vue 2

文章目录1. 简介2. 第一个Vue程序3. 指令3.1 判断循环3.2 操作属性3.3 绑定事件3.4 表单中数据双向绑定3.5 其他内置指令3.6 自定义指令4. 组件4.1 全局注册4.2 局部注册4.3 组件通讯4.4 单文件组件5. 组件插槽5.1 单个插槽5.2 具名插槽5.3 作用域插槽6. 内置组件6.1 component…...

Ubuntu 安装 Docker Engine

【参考】Install Docker Engine on Ubuntu | Docker Documentation: https://docs.docker.com/engine/install/ubuntu/ 【参考】Docker CE 镜像源站-阿里云开发者社区 https://developer.aliyun.com/article/110806 【规范】模仿 Docker 文档&#xff0c;Ubuntu, Docker 首字母…...

SpringBoot入门 - 添加内存数据库H2

上文我们展示了通过学习经典的MVC分包结构展示了一个用户的增删查改项目&#xff0c;但是我们没有接入数据库&#xff1b;本文将在上文的基础上&#xff0c;增加一个H2内存数据库&#xff0c;并且通过Spring 提供的数据访问包JPA进行数据查询。准备知识点在介绍通过Spring JPA接…...

高质量数字化转型创新发展大会暨中国信通院“铸基计划”年度会议成功召开

2023年3月3日&#xff0c;由中国信通院主办的高质量数字化转型创新发展大会暨中国信通院“铸基计划”年度会议在北京成功召开。本次大会深度展示了中国信通院在数字化领域的工作成果&#xff0c;并全面展望了2023年行业的数字化发展趋势。同时&#xff0c;大会发布了中国信通院…...

2023年如何通过软考初级程序员?

初级的考试难度不大&#xff0c;稍微有点编程基础&#xff0c;认真备考应该没什么大问题。 先清楚大纲&#xff1a; 高效备考&#xff01;理清考点&#xff0c;针对性复习 科目一&#xff1a;综合知识 75道单项选择题&#xff0c;1题1分&#xff0c;时长150分钟&#xff1b;…...

视频自动播放的实现与问题解决

一、前言 页面加载一个视频并且自动播放,这个需求看起来非常简单,实现起来感觉也非常简单;但是,实际做起来还是有几处容易产生问题的地方卡住进度。本文讨论基于Vue3的项目在实现页面加载视频后的自动播放遇到的几个问题。 二、页面实现 页面实现非常简单。在页面上放置一个…...

ThreadLocal 理解及面试

一、ThreadLocal 引用关系 图解关系说明&#xff1a; 每个线程拥有自己的 ThreadLocalMap 属性&#xff1b;ThreadLocalMap 的存储结构为 Entry[] 数组&#xff1b;Entry的Key是ThreadLocal类型且弱引用指向ThreadLocal对象&#xff0c;Value是我们自己定义的泛型值对象&#…...

巾帼绽芬芳 一起向未来(中篇)

编者按&#xff1a;为了隆重纪念纪念“三八”国际妇女节113周年&#xff0c;快来与你全方位、多层次分享交流“三八”国际妇女节的前世今生。分上篇&#xff08;节日简介、节日发展和节日意义&#xff09;、中篇&#xff08;节日活动宗旨和世界各国庆祝方式&#xff09;和下篇&…...

Qt学习2-Qt Creator新建项目小tips(哔站视频学习记录)

放送两个小tips: 1、MinGW和MSVC的区别 QT学习笔记&#xff08;二&#xff09;&#xff1a;QT MinGW 和 MSVC 编译方式_Leon_Chan0的博客-CSDN博客 2、如何安装QT对应版本的MSVC (1)问题描述&#xff1a;Qt5.12.8支持MSVC2015和MSVC2017&#xff0c;但是系统安装的是Visual…...

React-高阶组件

认识高级组件 高阶函数的维基百科定义:至少满足以下条件之一 1、接受一个或多个函数作为输入; 2、输出一个函数; JavaScript中比较常见的 filter、map、reduce 都是高阶函数 那么说明是高阶组件呢? 高阶组件的英文是 Higher-Order Components&#xff0c;简称为 HOC;官方的…...

python学习——【第一弹】

前言 Python是一种跨平台的计算机程序设计语言&#xff0c;是ABC语言的替代品&#xff0c;属于面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越来越多被用于独立的、大型项目的开发。 从这篇…...

数据结构——链表讲解(1)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年3月3日 内容&#xff1a;数据结构链表讲解 目录 前言&#xff1a; 链表的概念&#xff1a; 1.为什么要有链表&#xff1a; 2.链表的运行原理&#xff1a; 3.链表的形态多少&#xff1a; 4.单链表的代码书写&#xff1…...

docker部署MySQL主从服务

一.主从同步流程关于MySQL主从复制主要同步的是binlog日志&#xff0c;涉及到三个线程&#xff0c;一个运行在主节点&#xff08;log dump thread&#xff09;&#xff0c;其余两个(I/O thread, SQL thread)运行在从节点&#xff0c;如下图所示:当主库数据发生变更时&#xff0…...

儿童护目台灯哪种好用?几款真的保护视力的台灯品牌推荐

儿童眼睛还未发育完全&#xff0c;眼睛比较脆弱&#xff0c;但是现在的小孩子学习任务也比较繁重&#xff0c;经常晚上看书写字&#xff0c;所以选择合适的护眼台灯来保护眼睛很重要。 选择儿童护目台灯需要注意以下几个方面&#xff1a; &#xff08;一&#xff09;色温和亮…...

游戏逆向基础之OD找CALL实践

在逆向中除了分析数据之外&#xff0c;另外一个重要的工作就是找算法&#xff0c;找CALL 例如各种功能函数&#xff1a;攻击CALL,走路CALL,喊话CALL等等 以及加密解密等算法需要我们先锁定其位置&#xff0c;然后进行逆向分析。 最常见方法一 API函数下断&#xff0c;例如send …...

File 文件操作

File 文件操作&#xff1a; 一、常用方法&#xff1a; 方法类型描述public File(String pathname&#xff09;构造给定一个要操作文件的完整路径public File(File parent, String child)构造给定要操作文件的父路径和子文件名称public boolean createNewFile() throws IOExce…...

网站开发大作业/百度一下浏览器

1. 问题描述&#xff1a; 小明和朋友们一起去郊外植树&#xff0c;他们带了一些在自己实验室精心研究出的小树苗。 小明和朋友们一共有 n 个人&#xff0c;他们经过精心挑选&#xff0c;在一块空地上每个人挑选了一个适合植树的位置&#xff0c;总共 n 个。他们准备把自己带的…...

网站平台由什么搭建/企业员工培训课程

代码片段及快捷键设置 主要为了插入表格和图片标签节约一点输入时间 代码片段设置 ctrlshiftp 打开面板输入 configure user snippets选择markdowncopy如下设置放入{}中 "tb4*4": {"prefix": "tb4*4","body": ["| $1 | $2 | $…...

网站建设一六八互联/东莞搜索优化

本文授权转载自学术头条作者&#xff1a;赵雅琦前段时间&#xff0c;浙江高考满分作文《生活在树上》因为晦涩难懂的内容&#xff0c;刷爆了各种社交媒体。外行人看热闹&#xff0c;内行人看门道&#xff0c;大神们透过现象看本质。一般来说&#xff0c;高考作文可以通过批量化…...

上海建站网站的企业/海外推广方案

四、链表 链表常用算法及思想&#xff1a;快慢指针、哈希表 注意点&#xff1a;注意链表的边界情况&#xff0c;如头结点 4.1删除链表的倒数第n个结点 原题链接 给定一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 输入&#xff1a;h…...

合肥做网站优化/互联网营销师是干什么

4.1 Scala数组 数组是最常用的收集一系列元素的结构数组的声明与其他数值类型声明类似定长数组声明 val A new Array [T] (N) val Anew Array [Int] (10)数组声明时若不给出值&#xff0c;会被初始化&#xff0c;初始化后同样能对数组成员进行赋值 数组成员初始化&#xff0c;…...

彩票网站做一级代理犯法吗/网络推广公司名字

挂载 NFS 远程目录备份 Oracle 数据库(第13天) ->返回总目录<- 前面讲了如何在 Oracle 本地定时备份数据库,但是这种方式用的人比较少,因为如果本地磁盘坏了就会导致数据库和备份同时丢失,无法找回数据,风险也比较大。 针对这种情况,比较常用的方式是通过存储挂…...