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

【题解】—— LeetCode一周小结46

🌟欢迎来到 我的博客 —— 探索技术的无限可能!


🌟博客的简介(文章目录)


【题解】—— 每日一道题目栏


上接:【题解】—— LeetCode一周小结45

在这里插入图片描述

11.切棍子的最小成本

题目链接:1547. 切棍子的最小成本

有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。例如,长度为 6 的棍子可以标记如下:

在这里插入图片描述

给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置。

你可以按顺序完成切割,也可以根据需要更改切割的顺序。

每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。请参阅第一个示例以获得更直观的解释。

返回切棍子的 最小总成本 。

示例 1:

在这里插入图片描述

输入:n = 7, cuts = [1,3,4,5]

输出:16

解释:按 [1, 3, 4, 5] 的顺序切割的情况如下所示:
在这里插入图片描述

第一次切割长度为 7 的棍子,成本为 7 。第二次切割长度为 6 的棍子(即第一次切割得到的第二根棍子),第三次切割为长度 4
的棍子,最后切割长度为 3 的棍子。总成本为 7 + 6 + 4 + 3 = 20 。 而将切割顺序重新排列为 [3, 5, 1, 4]
后,总成本 = 16(如示例图中 7 + 4 + 3 + 2 = 16)。

示例 2:

输入:n = 9, cuts = [5,6,1,4,2]

输出:22

解释:如果按给定的顺序切割,则总成本为 25 。总成本 <= 25 的切割顺序很多,例如,[4, 6, 5, 2, 1] 的总成本 =
22,是所有可能方案中成本最小的。

提示:

2 <= n <= 10^6

1 <= cuts.length <= min(n - 1, 100)

1 <= cuts[i] <= n - 1

cuts 数组中的所有整数都 互不相同

题解:
方法:记忆化搜索
        

class Solution {public int minCost(int n, int[] cuts) {Arrays.sort(cuts);int m = cuts.length + 2;int[] newCuts = new int[m];System.arraycopy(cuts, 0, newCuts, 1, m - 2);newCuts[m - 1] = n;int[][] memo = new int[m][m];return dfs(0, m - 1, newCuts, memo);}private int dfs(int i, int j, int[] cuts, int[][] memo) {if (i + 1 == j) { // 无需切割return 0;}if (memo[i][j] > 0) { // 之前计算过return memo[i][j];}int res = Integer.MAX_VALUE;for (int k = i + 1; k < j; k++) {res = Math.min(res, dfs(i, k, cuts, memo) + dfs(k, j, cuts, memo));}return memo[i][j] = res + cuts[j] - cuts[i];}
}

12.统计满足 K 约束的子字符串数量 I

题目链接:3258. 统计满足 K 约束的子字符串数量 I

给你一个 二进制 字符串 s 和一个整数 k。

如果一个 二进制字符串 满足以下任一条件,则认为该字符串满足 k 约束:

字符串中 0 的数量最多为 k。
字符串中 1 的数量最多为 k。
返回一个整数,表示 s 的所有满足 k 约束 的
子字符串
的数量。

示例 1:

输入:s = “10101”, k = 1

输出:12

解释:

s 的所有子字符串中,除了 “1010”、“10101” 和 “0101” 外,其余子字符串都满足 k 约束。

示例 2:

输入:s = “1010101”, k = 2

输出:25

解释:

s 的所有子字符串中,除了长度大于 5 的子字符串外,其余子字符串都满足 k 约束。

示例 3:

输入:s = “11111”, k = 1

输出:15

解释:

s 的所有子字符串都满足 k 约束。

提示:

1 <= s.length <= 50

1 <= k <= s.length

s[i] 是 ‘0’ 或 ‘1’。

题解:
方法:滑动窗口
        

class Solution {public int countKConstraintSubstrings(String S, int k) {char[] s = S.toCharArray();int ans = 0;int left = 0;int[] cnt = new int[2];for (int i = 0; i < s.length; i++) {cnt[s[i] & 1]++;while (cnt[0] > k && cnt[1] > k) {cnt[s[left] & 1]--;left++;}ans += i - left + 1;}return ans;}
}

13.统计满足 K 约束的子字符串数量 II

题目链接:3261. 统计满足 K 约束的子字符串数量 II

给你一个 二进制 字符串 s 和一个整数 k。

另给你一个二维整数数组 queries ,其中 queries[i] = [li, ri] 。

如果一个 二进制字符串 满足以下任一条件,则认为该字符串满足 k 约束:

字符串中 0 的数量最多为 k。
字符串中 1 的数量最多为 k。
返回一个整数数组 answer ,其中 answer[i] 表示 s[li…ri] 中满足 k 约束 的
子字符串
的数量。

示例 1:

输入:s = “0001111”, k = 2, queries = [[0,6]]

输出:[26]

解释:

对于查询 [0, 6], s[0…6] = “0001111” 的所有子字符串中,除 s[0…5] = “000111” 和
s[0…6] = “0001111” 外,其余子字符串都满足 k 约束。

示例 2:

输入:s = “010101”, k = 1, queries = [[0,5],[1,4],[2,3]]

输出:[15,9,3]

解释:

s 的所有子字符串中,长度大于 3 的子字符串都不满足 k 约束。

提示:

1 <= s.length <= 105

s[i] 是 ‘0’ 或 ‘1’

1 <= k <= s.length

1 <= queries.length <= 105

queries[i] == [li, ri]

0 <= li <= ri < s.length

所有查询互不相同

题解:
方法:滑动窗口+前缀和+二分查找
        

class Solution {public long[] countKConstraintSubstrings(String S, int k, int[][] queries) {char[] s = S.toCharArray();int n = s.length;int[] left = new int[n];long[] sum = new long[n + 1];int[] cnt = new int[2];int l = 0;for (int i = 0; i < n; i++) {cnt[s[i] & 1]++;while (cnt[0] > k && cnt[1] > k) {cnt[s[l++] & 1]--;}left[i] = l; // 记录合法子串右端点 i 对应的最小左端点 l// 计算 i-left[i]+1 的前缀和sum[i + 1] = sum[i] + i - l + 1;}long[] ans = new long[queries.length];for (int i = 0; i < queries.length; i++) {int ql = queries[i][0];int qr = queries[i][1];// 如果区间内所有数都小于 ql,结果是 j=qr+1int j = lowerBound(left, ql - 1, qr + 1, ql);ans[i] = sum[qr + 1] - sum[j] + (long) (j - ql + 1) * (j - ql) / 2;}return ans;}// 返回在开区间 (left, right) 中的最小的 j,满足 nums[j] >= target// 如果没有这样的数,返回 right// 原理见 https://www.bilibili.com/video/BV1AP41137w7/private int lowerBound(int[] nums, int left, int right, int target) {while (left + 1 < right) { // 区间不为空// 循环不变量:// nums[left] < target// nums[right] >= targetint mid = left + (right - left) / 2;if (nums[mid] < target) {left = mid; // 范围缩小到 (mid, right)} else {right = mid; // 范围缩小到 (left, mid)}}return right;}
}

方法:预处理
        

class Solution {public long[] countKConstraintSubstrings(String S, int k, int[][] queries) {char[] s = S.toCharArray();int n = s.length;int[] left = new int[n];long[] sum = new long[n + 1];int[] cnt = new int[2];int l = 0;for (int i = 0; i < n; i++) {cnt[s[i] & 1]++;while (cnt[0] > k && cnt[1] > k) {cnt[s[l++] & 1]--;}left[i] = l;sum[i + 1] = sum[i] + i - l + 1;}int[] right = new int[n];l = 0;for (int i = 0; i < n; i++) {while (l < n && left[l] < i) {l++;}right[i] = l;}long[] ans = new long[queries.length];for (int i = 0; i < queries.length; i++) {int ql = queries[i][0];int qr = queries[i][1];int j = Math.min(right[ql], qr + 1);ans[i] = sum[qr + 1] - sum[j] + (long) (j - ql + 1) * (j - ql) / 2;}return ans;}
}

14.统计好节点的数目

题目链接:3249. 统计好节点的数目

现有一棵 无向 树,树中包含 n 个节点,按从 0 到 n - 1 标记。树的根节点是节点 0 。给你一个长度为 n - 1 的二维整数数组 edges,其中 edges[i] = [ai, bi] 表示树中节点 ai 与节点 bi 之间存在一条边。

如果一个节点的所有子节点为根的
子树
包含的节点数相同,则认为该节点是一个 好节点。

返回给定树中 好节点 的数量。

子树 指的是一个节点以及它所有后代节点构成的一棵树。

示例 1:

输入:edges = [[0,1],[0,2],[1,3],[1,4],[2,5],[2,6]]

输出:7

说明:

在这里插入图片描述

树的所有节点都是好节点。

示例 2:

输入:edges = [[0,1],[1,2],[2,3],[3,4],[0,5],[1,6],[2,7],[3,8]]

输出:6

说明:

在这里插入图片描述

树中有 6 个好节点。上图中已将这些节点着色。

示例 3:

输入:edges =
[[0,1],[1,2],[1,3],[1,4],[0,5],[5,6],[6,7],[7,8],[0,9],[9,10],[9,12],[10,11]]

输出:12

解释:
在这里插入图片描述

除了节点 9 以外其他所有节点都是好节点。

提示:

2 <= n <= 105

edges.length == n - 1

edges[i].length == 2

0 <= ai, bi < n

输入确保 edges 总表示一棵有效的树。

题解:
方法:深度优先搜索
        

class Solution {public int countGoodNodes(int[][] edges) {int n = edges.length + 1;List<Integer>[] g = new ArrayList[n];Arrays.setAll(g, i -> new ArrayList<>());for (int[] e : edges) {int x = e[0];int y = e[1];g[x].add(y);g[y].add(x);}dfs(0, -1, g);return ans;}private int ans;private int dfs(int x, int fa, List<Integer>[] g) {int size = 1;int sz0 = 0;boolean ok = true;for (int y : g[x]) {if (y == fa) {continue; // 不能递归到父节点}int sz = dfs(y, x, g);if (sz0 == 0) {sz0 = sz; // 记录第一个儿子子树的大小} else if (sz != sz0) { // 存在大小不一样的儿子子树ok = false; // 注意不能 break,其他子树 y 仍然要递归}size += sz;}ans += ok ? 1 : 0;return size;}
}

15.最少翻转次数使二进制矩阵回文 I

题目链接:3239. 最少翻转次数使二进制矩阵回文 I

给你一个 m x n 的二进制矩阵 grid 。

如果矩阵中一行或者一列从前往后与从后往前读是一样的,那么我们称这一行或者这一列是 回文 的。

你可以将 grid 中任意格子的值 翻转 ,也就是将格子里的值从 0 变成 1 ,或者从 1 变成 0 。

请你返回 最少 翻转次数,使得矩阵 要么 所有行是 回文的 ,要么所有列是 回文的 。

示例 1:

输入:grid = [[1,0,0],[0,0,0],[0,0,1]]

输出:2

解释:

在这里插入图片描述

将高亮的格子翻转,得到所有行都是回文的。

示例 2:

输入:grid = [[0,1],[0,1],[0,0]]

输出:1

解释:

在这里插入图片描述

将高亮的格子翻转,得到所有列都是回文的。

示例 3:

输入:grid = [[1],[0]]

输出:0

解释:

所有行已经是回文的。

提示:

m == grid.length

n == grid[i].length

1 <= m * n <= 2 * 105

0 <= grid[i][j] <= 1

题解:
方法:回文
        

class Solution {public int minFlips(int[][] grid) {int m = grid.length;int n = grid[0].length;int diffRow = 0;for (int[] row : grid) {for (int j = 0; j < n / 2; j++) {if (row[j] != row[n - 1 - j]) {diffRow++;}}}int diffCol = 0;for (int j = 0; j < n; j++) {for (int i = 0; i < m / 2; i++) {if (grid[i][j] != grid[m - 1 - i][j]) {diffCol++;}}}return Math.min(diffRow, diffCol);}
}

16.最少翻转次数使二进制矩阵回文 II

题目链接:3240. 最少翻转次数使二进制矩阵回文 II

给你一个 m x n 的二进制矩阵 grid 。

如果矩阵中一行或者一列从前往后与从后往前读是一样的,那么我们称这一行或者这一列是 回文 的。

你可以将 grid 中任意格子的值 翻转 ,也就是将格子里的值从 0 变成 1 ,或者从 1 变成 0 。

请你返回 最少 翻转次数,使得矩阵中 所有 行和列都是 回文的 ,且矩阵中 1 的数目可以被 4 整除 。

示例 1:

输入:grid = [[1,0,0],[0,1,0],[0,0,1]]

输出:3

解释:
在这里插入图片描述

示例 2:

输入:grid = [[0,1],[0,1],[0,0]]

输出:2

解释:
在这里插入图片描述

示例 3:

输入:grid = [[1],[1]]

输出:2

解释:

在这里插入图片描述

提示:

m == grid.length

n == grid[i].length

1 <= m * n <= 2 * 105

0 <= grid[i][j] <= 1

题解:
方法:贪心
        

class Solution {public int minFlips(int[][] a) {int m = a.length;int n = a[0].length;int ans = 0;for (int i = 0; i < m / 2; i++) {for (int j = 0; j < n / 2; j++) {int cnt1 = a[i][j] + a[i][n - 1 - j] + a[m - 1 - i][j] + a[m - 1 - i][n - 1 - j];ans += Math.min(cnt1, 4 - cnt1); // 全为 1 或全为 0}}if (m % 2 > 0 && n % 2 > 0) {// 正中间的数必须是 0ans += a[m / 2][n / 2];}int diff = 0;int cnt1 = 0;if (m % 2 > 0) {// 统计正中间这一排for (int j = 0; j < n / 2; j++) {if (a[m / 2][j] != a[m / 2][n - 1 - j]) {diff++;} else {cnt1 += a[m / 2][j] * 2;}}}if (n % 2 > 0) {// 统计正中间这一列for (int i = 0; i < m / 2; i++) {if (a[i][n / 2] != a[m - 1 - i][n / 2]) {diff++;} else {cnt1 += a[i][n / 2] * 2;}}}return ans + (diff > 0 ? diff : cnt1 % 4);}
}

17.适龄的朋友

题目链接:825. 适龄的朋友

在社交媒体网站上有 n 个用户。给你一个整数数组 ages ,其中 ages[i] 是第 i 个用户的年龄。

如果下述任意一个条件为真,那么用户 x 将不会向用户 y(x != y)发送好友请求:

ages[y] <= 0.5 * ages[x] + 7
ages[y] > ages[x]
ages[y] > 100 && ages[x] < 100
否则,x 将会向 y 发送一条好友请求。

注意,如果 x 向 y 发送一条好友请求,y 不必也向 x 发送一条好友请求。另外,用户不会向自己发送好友请求。

返回在该社交媒体网站上产生的好友请求总数。

示例 1:

输入:ages = [16,16]

输出:2

解释:2 人互发好友请求。

示例 2:

输入:ages = [16,17,18]

输出:2

解释:产生的好友请求为 17 -> 16 ,18 -> 17 。

示例 3:

输入:ages = [20,30,100,110,120]

输出:3

解释:产生的好友请求为 110 -> 100 ,120 -> 110 ,120 -> 100 。

提示:

n == ages.length

1 <= n <= 2 * 104

1 <= ages[i] <= 120

题解:
方法:计数+滑动窗口
        

class Solution {public int numFriendRequests(int[] ages) {int[] cnt = new int[121];for (int age : ages) {cnt[age]++;}int ans = 0;int ageY = 0;int cntWindow = 0;for (int ageX = 0; ageX < cnt.length; ageX++) {cntWindow += cnt[ageX];if (ageY * 2 <= ageX + 14) { // 不能发送好友请求cntWindow -= cnt[ageY];ageY++;}if (cntWindow > 0) { // 存在可以发送好友请求的用户ans += cnt[ageX] * cntWindow - cnt[ageX];}}return ans;}
}

下接:【题解】—— LeetCode一周小结47


相关文章:

【题解】—— LeetCode一周小结46

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结45 11.切棍子的最小成本 题目链接&#xff1a;1547. 切棍子的最…...

Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导 一、前言 在充满活力与激情的校园生活中&#xff0c;校运会不仅是…...

python里的数据结构

列表&#xff08;List&#xff09; 定义和特点&#xff1a; 列表是一种有序的可变序列&#xff0c;可包含不同类型的元素&#xff0c;如整数、字符串、列表等。可以通过索引访问和修改元素&#xff0c;索引从 0 开始。代码示例&#xff1a; my_list [1, 2, apple, [4, 5]] pr…...

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二十一集:制作游戏的金钱系统吉欧Geo和初步制作HUD Canvas的额外内容

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作游戏的金钱系统吉欧Geo以及HUD Camera 1.制作金钱系统吉欧2.制作吉欧的脚本Geo Counter逻辑处理3.制作HUD Canvas的吉欧的UI4.在敌人的HealthManager.c…...

底层逻辑之:极大似然方法(Maximum Likelihood Estimation, MLE)

简介&#xff1a; 极大似然方法&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是一种用于估计统计模型参数的方法。其核心思想是基于观测数据来寻找最可能产生这些数据的模型参数。 早在1821年&#xff0c;德国数学家高斯&#xff08;C. F. Gauss&#xff09;就…...

笔记:Centos Nginx Jdk Mysql OpenOffce KkFile Minio安装部署

远程工具 ToDesk Nginx 解压 tar zxvf nginx-1.20.2.tar.gz进入Nginx 文件夹 cd nginx-1.20.2报错解决 ./configure: error: C compiler cc is not found yum -y install gcc gcc-c autoconf automake make./configure: error: the HTTP rewrite module requires the PC…...

【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…...

深入探索Go语言中的sync.Mutex与sync.RWMutex:原理、应用与实践

深入探索Go语言中的sync.Mutex与sync.RWMutex:原理、应用与实践 在并发编程的世界里,Go语言以其独特的并发模型和简洁的语法赢得了广泛的关注。在Go语言的并发控制工具箱中,sync.Mutex和sync.RWMutex是两个至关重要的工具,它们帮助开发者保护共享资源,避免竞态条件,确保…...

15.postgresql--jsonb 数组进行打平,过滤

用jsonb_array_elements函数先展开数组&#xff0c;再用jsonb_each函数遍历元素中的键值对 例如&#xff1a; SELECT * FROM data_table, LATERAL jsonb_array_elements(json_column) WITH ORDINALITY as elem(element, idx) JOIN LATERAL jsonb_each(elem.element) as kv(ke…...

linux下i2c开发与框架源码分析

目录 1 概述 2 I2c子系统框架 3 I2C的使用流程 3.1 在驱动里使用 3.2 在应用层使用 3.3 I2ctool的使用 4 为硬件i2c注册一个适配器 5 i2c子系统源码流程分析 5.1 i2c device与driver绑定过程 5.1.1 Driver的注册与处理 5.1.2 Client device的生成 5.2 I2c的发送与接…...

[ruby on rails] 安装docker

1. docker安装 ubuntu14.04后自带docker安装包&#xff0c;可以直接安装docker.io sudo apt-get updatesudo apt-get install -y docker.io # 安装后启动sudo service docker start最新版本docker 安装docker-ce # 官方源 curl -fsSL https://download.docker.com/linux/ubun…...

I2C学习

详情学习 12. I2C通讯 — [野火]Linux基础与应用开发实战指南——基于LubanCat-RK系列板卡 文档 (embedfire.com) 问题 i2c总线中scl和sda两条线的作用以及区别 在 I2C 总线&#xff08;Inter-Integrated Circuit&#xff09;中&#xff0c;SCL 和 SDA 是两条核心信号线&am…...

VUE:基于MVVN的前端js框架

文章目录 vue框架v-show vue框架 注意是 先写函数名&#xff0c;再写function。 handle:function (){}下面是错误的 function:handle(){}3 v-show 本质上等于号后面还是判断条件&#xff0c;所以不能写赋值语句&#xff0c;下面是正确的 下面是错误的 v-show " ge…...

06、Spring AOP

在我们接下来聊Spring AOP之前我们先了解一下设计模式中的代理模式。 一、代理模式 代理模式是23种设计模式中的一种,它属于结构型设计模式。 对于代理模式的理解: 程序中对象A与对象B无法直接交互,如:有人要找某个公司的老总得先打前台登记传达程序中某个功能需要在原基…...

c语言学习26字符串的应用

字符串在stm32串口中的应用 串口控制流水灯 pc通过串口发送字符串命令控制流水灯 open 流水灯打开 close 流水灯关闭 speed 1~9速度控制 if(strcmp((char *)usart1_rec_buff,"open")0) { led_flag 1; } else if(strcmp((char *)usart1_rec_buff,"close&qu…...

法语旅游常用口语-柯桥学外语到蓝天广场泓畅学校

以下是一些实用的法语旅游常用口语&#xff0c;帮助你在法国旅行时能够进行基本的交流&#xff1a; 问候与道别 Bonjour: 用于日常问候。Au revoir: 用于告别。 请求帮助 S’il vous plat: 用于请求帮助&#xff0c;例如在需要寻找某个地点或服务时。 询问信息 Excusez-moi: 用…...

Kafka 生产者优化与数据处理经验

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…...

MySQL 主从复制之多线程复制

一、MySQL 多线程复制的背景 MySQL 的主从复制延迟一直是受开发者最为关注的问题之一&#xff0c;MySQL 从 5.6 版本开始追加了并行复制功能&#xff0c;目的就是为了改善复制延迟问题&#xff0c;并行复制称为enhanced multi-threaded slave&#xff08;简称MTS&#xff09;。…...

Linux2.6内核进程调度队列

文章目录 前言运行队列 runqueue优先级活动队列过期队列活跃队列 VS 过期队列active指针和expired指针O(1)调度算法 前言 在前面学习并认识了进程之后&#xff0c;我们会发出一个疑问&#xff1a;Linux内核是如何调度进程的呢&#xff1f; 接下来我们就以Linux2.6内核为例深入探…...

Infineon(英飞凌) TLE985xQX 芯片电机工作电流、电压AD采样

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 单片机芯片合集 文章目录 其他系列文章导航 文章目录 前言 一、选取合适的端口 1.通过 OP1、OP2 电流采集运放输入端口进行H桥驱动的电流采集。 2.通过 O_D_VBAT_AD_EN、I_A_VBAT_A…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...