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

数据结构与算法:回溯

回溯

先给出一些leetcode算法题,以后遇见了相关题目再往上增加
主要参考代码随想录

2.1、组合问题
  • 关于去重:两种写法的性能分析

    需要注意的是:使用set去重的版本相对于used数组的版本效率都要低很多,大家在leetcode上提交,能明显发现。

    原因在回溯算法:递增子序列 (opens new window)中也分析过,主要是因为程序运行的时候对unordered_set 频繁的insert,unordered_set需要做哈希映射(也就是把key通过hash function映射为唯一的哈希值)相对费时间,而且insert的时候其底层的符号表也要做相应的扩充,也是费时的。

    而使用used数组在时间复杂度上几乎没有额外负担!

    使用set去重,不仅时间复杂度高了,空间复杂度也高了,在本周小结!(回溯算法系列三) (opens new window)中分析过,组合,子集,排列问题的空间复杂度都是O(n),但如果使用set去重,空间复杂度就变成了O(n^2),因为每一层递归都有一个set集合,系统栈空间是n,每一个空间都有set集合。

    那有同学可能疑惑 用used数组也是占用O(n)的空间啊?

    used数组可是全局变量,每层与每层之间公用一个used数组,所以空间复杂度是O(n + n),最终空间复杂度还是O(n)。

1、77. 组合

给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

示例 1:

输入:n = 4, k = 2
输出:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],
]

示例 2:

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

提示:

  • 1 <= n <= 20
  • 1 <= k <= n
class Solution {
public:vector<vector<int>> res;vector<int> mid;void backt(int n,int k,int index){if(mid.size()==k){res.push_back(mid);return ;}for(int i = index;i<=n;i++){mid.push_back(i);backt(n,k,i+1);mid.pop_back();}}vector<vector<int>> combine(int n, int k) {backt(n,k,1);return res;}
};// 使用function函数
// function<返回类型(参数类型1, 参数类型2, ...)> func;
class Solution {
public:vector<vector<int>> combine(int n, int k) {vector<vector<int>> res;vector<int> mid;function<void(int)> backt = [&](int index){if(mid.size() == k){res.push_back(mid);return;}for(int i = index;i<=n;i++){mid.push_back(i);backt(i+1);mid.pop_back();}};backt(1);return res;}
};
  • 时间复杂度: O(n * 2^n)
  • 空间复杂度: O(n)
2、216. 组合总和 III

找出所有相加之和为 nk 个数的组合,且满足下列条件:

  • 只使用数字1到9
  • 每个数字 最多使用一次

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。

示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
解释:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
没有其他符合的组合了。

示例 3:

输入: k = 4, n = 1
输出: []
解释: 不存在有效的组合。
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。

提示:

  • 2 <= k <= 9
  • 1 <= n <= 60
class Solution {
public:vector<vector<int>> combinationSum3(int k, int n) {vector<vector<int>> res;vector<int>  mid;function<void(int)> backt = [&](int index){if(mid.size() == k && n==0){res.push_back(mid);return;}if(n<0) return;for(int i =index;i<=9;i++ ){n = n-i;mid.push_back(i);backt(i+1);n = n+i;mid.pop_back();}};backt(1);return res;}
};
  • 时间复杂度: O(n * 2^n):每个数有两种可能选或者不选,这里不太理解
  • 空间复杂度: O(n)
3、17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

img

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字
/*思路:主要是回溯,建立起对应关系即可
*/
class Solution {
public:vector<string> letterCombinations(string digits) {unordered_map<int,string> mp;mp[2] = "abc";mp[3] = "def";mp[4] = "ghi";mp[5] = "jkl";mp[6] = "mno";mp[7] = "pqrs";mp[8] = "tuv";mp[9] = "wxyz";vector<string> res;string mid;if(digits.size()==0) return {};function<void(int)> backt = [&](int index){if(mid.size() == digits.size()){res.push_back(mid);return;}for(auto a:mp[digits[index]-'0']){mid.push_back(a);backt(index+1);mid.pop_back();}};backt(0);return res;}
};
4、39. 组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

示例 1:

输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。

示例 2:

输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]

示例 3:

输入: candidates = [2], target = 1
输出: []

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates 的所有元素 互不相同
  • 1 <= target <= 40
/*思路:重复选择,找到最后条件即可
*/
class Solution {
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<vector<int>> res;vector<int> mid;function<void(int)> backt = [&](int index){if(target == 0){res.push_back(mid);return ;}if(target<0) return;for(int i = index;i<candidates.size();i++){target = target - candidates[i];mid.push_back(candidates[i]);backt(i);mid.pop_back();target = target + candidates[i];}};backt(0);return res;}
};
5、40. 组合总和 II

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用 一次

**注意:**解集不能包含重复的组合。

示例 1:

输入: candidates = [10,1,2,7,6,1,5], target = 8,
输出:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]

示例 2:

输入: candidates = [2,5,2,1,2], target = 5,
输出:
[
[1,2,2],
[5]
]

提示:

  • 1 <= candidates.length <= 100
  • 1 <= candidates[i] <= 50
  • 1 <= target <= 30
/*前几道题目都是常规的回溯,这个题目要求去重;去重方法:给原始数据排完序的前提下:每一层的重复的去掉所以有两种方法,:第一种:每一个backt中创建一个set去重第二种:直接通过挨个的下标去重:但是有一点需要注意i是从index+1开始与前一个比较去重if(i>index)这个一定不能忘记if(i>index&&candidates[i] == candidates[i-1] ) continue;这句话是每一层第一个下标肯定是index,又为了和前面有个比较,所以需要i>index:说明前面已经处理这个元素了不用再处理了
*/
class Solution {
public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<vector<int>> res;vector<int> mid;int len = candidates.size();function<void(int)> backt = [&](int index){if(target == 0){res.push_back(mid);}if(target<0) return;// unordered_set<int> st;for(int i = index;i<len;i++){// if(st.count(candidates[i])) continue;//这句话是每一层第一个下标肯定是index,又为了和前面有个比较,所以需要i>index:说明前面已经处理这个元素了不用再处理了if( i>index&&candidates[i] == candidates[i-1] ) continue;// st.insert(candidates[i]);target-=candidates[i];mid.push_back(candidates[i]);backt(i+1);mid.pop_back();target+=candidates[i];}};sort(candidates.begin(),candidates.end());backt(0);return res;}
};
2.2、子集问题
1、78. 子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

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

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同
/*经典子集问题,模板题
*/
class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> res;vector<int> mid;function<void(int)> backt = [&](int index) {res.push_back(mid);for (int i = index; i < nums.size(); i++) {mid.push_back(nums[i]);backt(i + 1);mid.pop_back();}};backt(0);return res;}
};
2、90. 子集 II

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的

子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例 1:

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

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
/*去重子集问题:与去重组合问题一个思路:先排序,每一层的重复元素跳过即可:最后的结果就会去重复:两个方法:第一个:每一层set去重第二个:每一层index+1开始向前判断是否相等
*/class Solution {
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {vector<vector<int>> res;vector<int> mid;sort(nums.begin(), nums.end());function<void(int)> backt = [&](int index) {res.push_back(mid);for (int i = index; i < nums.size(); i++) {if (i > index && nums[i] == nums[i - 1])continue;mid.push_back(nums[i]);backt(i + 1);mid.pop_back();}};backt(0);return res;}
};
3、491. 非递减子序列

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。

示例 1:

输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]

示例 2:

输入:nums = [4,4,3,2,1]
输出:[[4,4]]

提示:

  • 1 <= nums.length <= 15
  • -100 <= nums[i] <= 100
/*思路:还是去重问题:主要是这个无法排序,还需要去重这时候两个相同的元素就不是挨着的了,所以只能用那个set去解决所以:无法排序的使用set去重即可
*/
class Solution {
public:vector<vector<int>> findSubsequences(vector<int>& nums) {vector<vector<int>> res;vector<int> mid;function<void(int)> backt = [&](int index) {if(mid.size()>=2){res.push_back(mid);}unordered_set<int> st;for (int i = index; i < nums.size(); i++) {if(st.count(nums[i])) continue;st.insert(nums[i]);if(mid.empty()){mid.push_back(nums[i]);backt(i + 1);mid.pop_back();}else if(!mid.empty() && mid.back()<=nums[i]){mid.push_back(nums[i]);backt(i + 1);mid.pop_back();}}};backt(0);return res;}
};
2.3、排列问题
1、46. 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同
/*思路:唯一的区别就是不需要坐标了,每一层都从头到尾来一遍加上过了的直接跳过
*/
class Solution {
public:vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> res;vector<int> mid;vector<bool> visited(nums.size(), false);function<void()> backt = [&]() {if (mid.size() == nums.size()) {res.push_back(mid);return;}for (int i = 0; i < nums.size(); i++) {if (visited[i])continue;mid.push_back(nums[i]);visited[i] = true;backt();mid.pop_back();visited[i] = false;}};backt();return res;}
};
  • 时间复杂度: O(n*n!):因为有跳过的所以就是阶乘
  • 空间复杂度: O(n)
2、47. 全排列 II

给定一个可包含重复数字的序列 nums按任意顺序 返回所有不重复的全排列。

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 8
  • -10 <= nums[i] <= 10
/*排列问题降重:只要能排序同样是两个思路:但是set更好理解使用相邻坐标判断的时候注意122的问题:需要加上visited的约束
*/class Solution {
public:vector<vector<int>> permuteUnique(vector<int>& nums) {vector<vector<int>>res;vector<int> mid;vector<bool> visited(nums.size(),false);function<void()> backt=[&](){if(mid.size()==nums.size()){res.push_back(mid);return;}	// unordered_set<int> st;for(int i = 0;i<nums.size();i++){if(visited[i]) continue;if (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1]) continue;// st.insert(nums[i]);mid.push_back(nums[i]);visited[i] = true;backt();mid.pop_back();visited[i] = false;}};sort(nums.begin(),nums.end());backt();return res;}
};
  • 时间复杂度: 最差情况所有元素都是唯一的。复杂度和全排列1都是 O(n! * n) 对于 n 个元素一共有 n! 中排列方案。而对于每一个答案,我们需要 O(n) 去复制最终放到 result 数组
  • 空间复杂度: O(n) 回溯树的深度取决于我们有多少个元素
2.3、切割问题
1、131. 分割回文串

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是

回文串

。返回 s 所有可能的分割方案。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"
输出:[["a"]]

提示:

  • 1 <= s.length <= 16
  • s 仅由小写英文字母组成
/*思路:切割注意左右就行i为右,维护一个左下标就可以了比如aaba      aa     aaba ab   bb新的左下标为 i+1那么截至条件就是左边下标为s.size() = 3	这种题目记住维护左右下标,如何找个例子去模拟一下再去写代码
*/class Solution {
public:bool istar(string s, int left, int right) {while (left <= right) {if (s[left] != s[right])return false;left++;right--;}return true;}vector<vector<string>> partition(string s) {vector<vector<string>> res;vector<string> mid;function<void(int)> backt = [&](int left) {if (left == s.size()) {res.push_back(mid);}for (int i = left; i < s.size(); i++) {if (istar(s, left, i)) {mid.push_back(s.substr(left, i - left + 1));backt(i + 1);mid.pop_back();}}};backt(0);return res;}
};
2、93. 复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

  • 例如:"0.1.2.201" "192.168.1.1"有效 IP 地址,但是 "0.011.255.245""192.168.1.312""192.168@1.1"无效 IP 地址。

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

示例 1:

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]

示例 2:

输入:s = "0000"
输出:["0.0.0.0"]

示例 3:

输入:s = "101023"
输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

提示:

  • 1 <= s.length <= 20
  • s 仅由数字组成
/**模拟一下,细节较多但是还是左右的下标去截取
*/
class Solution {
public:vector<string> restoreIpAddresses(string s) {vector<string> res;string mid;function<void(int,int)> backt = [&](int left,int cnt) {if (cnt==4&&left == s.size()) {mid.pop_back();res.push_back(mid);return;}if(cnt>4) return;for (int right = left; right < s.size(); right++) {string cur;string precur;cur = s.substr(left, right - left + 1);if(cur.size()>3) continue;int cur_num = stoi(cur);if ((cur.size()>1&&cur[0] == '0') || cur_num > 255)continue;precur = mid;mid += cur;mid.push_back('.');backt(right + 1,cnt+1);mid = precur;}};backt(0,0);return res;}
};

相关文章:

数据结构与算法:回溯

回溯 先给出一些leetcode算法题&#xff0c;以后遇见了相关题目再往上增加 主要参考代码随想录 2.1、组合问题 关于去重&#xff1a;两种写法的性能分析 需要注意的是&#xff1a;使用set去重的版本相对于used数组的版本效率都要低很多&#xff0c;大家在leetcode上提交&#x…...

KaiwuDB X 遨博智能 | 构建智能产线监测管理新系统

​01 项目背景 遨博智能作为国内协作机器人行业领军企业&#xff0c;深度布局制造、农业、医疗、教育、民生等场景&#xff0c;出货量连续四年蝉联国内第一、世界第二。随着工业自动化的蓬勃发展&#xff0c;遨博智能生产规模不断扩大&#xff0c;先后在常州、淄博等地建设完成…...

高等数学第三章---微分中值定理与导数的应用(§3.6 函数图像的描绘§3.7 曲率)

3.6 函数图像的描绘 一、曲线的渐近线 对于某些函数&#xff0c;其图形向无穷远处延伸时&#xff0c;会越来越趋近于某一条直线&#xff0c;这条直线被称为曲线的渐近线 (Asymptote)。 1. 定义 若曲线 y f ( x ) yf(x) yf(x) 上一点 P ( x , y ) P(x, y) P(x,y) 沿曲线趋…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.2 数据类型转换(CAST函数/自定义函数)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 PostgreSQL数据分析实战&#xff1a;数据清洗之数据类型转换&#xff08;CAST函数/自定义函数&#xff09;4.2 数据类型转换&#xff1a;让数据「格式正确&#xff0c;类型对…...

docker:制作镜像+上传镜像+拉取镜像

1.dockerfile制作镜像 示例内容&#xff1a; 1.创建一个index.js的文件 console.log("hello world")2.在相同目录下创建名为dockerfile的文件 FROM node:alpine COPY index.js /index.js CMD node /index.js3.构建镜像 docker build -t minterra/hello-docker . …...

信息系统监理师第二版教材模拟题第三组(含解析)

信息系统监理师模拟题第三组(30题) 监理基础理论 信息系统工程监理的性质是( ) A. 服务性、独立性、公正性、科学性 B. 强制性、营利性、行政性、技术性 C. 临时性、从属性、随意性、主观性 D. 单一性、封闭性、被动性、保守性答案:A 解析:监理具有服务性、独立性、公正…...

潮乎盲盒商城系统全开源多级分销推广海报奖品兑换试玩概率OSS云存储多端源码

一、源码描述 这是一套潮乎盲盒商城源码&#xff0c;仿小叮当盲盒商城&#xff0c;后端Laravel框架前端uniappvue&#xff0c;前后端数据库分离&#xff0c;支持四端同步数据&#xff08;H5小程序等&#xff09;&#xff0c;测试环境: php7.4&#xff0c;mysql5.6&#xff0c;…...

文章记单词 | 第64篇(六级)

一&#xff0c;单词释义 residence [ˈrezɪdəns] n. 住宅&#xff1b;居住&#xff1b;住所&#xff1b;居住期fling [flɪŋ] v. &#xff08;用力地&#xff09;扔&#xff0c;掷&#xff0c;抛&#xff1b;猛动&#xff08;身体或身体部位&#xff09;&#xff1b;急冲&a…...

数据同步实战篇

文章目录 数据同步实战篇1. mysql数据同步1.1 mysql集群部署1.2 数据同步1.2.1 同步复制1.2.2 异步复制1.2.3 半同步复制 2. redis数据同步2.1 redis集群部署2.2 数据同步 3. mq数据同步3.1 mq集群部署3.2 数据同步 4. es数据同步4.1 es集群部署4.2 数据同步 数据同步实战篇 数…...

具身系列——Double DQN算法实现CartPole游戏(强化学习)

完整代码参考&#xff1a; rl/ddqn_cartpole.py 陈先生/ailib - Gitee.com 部分训练得分&#xff1a; Model saved to ./output/best_model.pth New best model saved with average reward: 9.6 Episode: 0 | Train Reward: 25.0 | Epsilon: 0.995 | Best Eval Avg: 9.6…...

以下是在 Ubuntu 上的几款PDF 阅读器,涵盖轻量级、功能丰富和特色工具:

默认工具&#xff1a;Evince&#xff08;GNOME 文档查看器&#xff09; 特点&#xff1a;Ubuntu 预装&#xff0c;轻量快速&#xff0c;支持基本标注和书签。 安装&#xff1a;已预装&#xff0c;或手动安装&#xff1a; sudo apt install evince功能全面&#xff1a;Okular&…...

有关水下图像增强的论文

4.21 TEBCF&#xff1a;Real-World Underwater Image Texture Enhancement Model Based on Blurriness and Color Fusion 基于模糊和颜色融合的现实水下图像纹理增强模型 2022年的一篇文章&#xff0c;基于传统方法&#xff0c;基于不同的色彩方法构建了两个新的融合输入。一…...

Raycaster光线投射

Raycaster光线投射 3D虚拟工厂在线体验 描述 光线投射Raycaster&#xff0c;用于进行raycasting&#xff08;光线投射&#xff09;。 光线投射用于进行鼠标拾取&#xff08;在三维空间中计算出鼠标移过了什么物体&#xff09;。 构造器 Raycaster( origin : Vector3, dire…...

javaEE——单例模式

目录 前言1.概念2. 实现3. 比较和改进总结 前言 本篇文章来介绍单例模式&#xff0c;并讲述在保证线程安全的前提下&#xff0c;单例模式的写法。 1.概念 单例模式是一种设计模式&#xff0c;可以说是写代码的一种模板&#xff0c;如果在一些固定的场景下按照设计模式进行写…...

WSL在D盘安装Ubuntu

目录 前提条件步骤一&#xff1a;查看可用的Linux发行版步骤二&#xff1a;安装Ubuntu 22.04步骤三&#xff1a;导出已安装的Ubuntu到D盘步骤四&#xff1a;注销当前Ubuntu安装步骤五&#xff1a;在D盘导入Ubuntu启动Ubuntu 前提条件 Windows 10或Windows 11系统已启用WSL功能…...

Java并发编程-多线程基础(三)

文章目录 线程间通信线程间通信的核心问题volatile 关键字1. 核心特性2. 使用限制3. 示例 synchronized 关键字1. 核心特性2. 示例 volatile 与 synchronized 的对比Volatile 和 Synchronized 最佳实践 线程间通信 线程间通信的核心问题 多个线程通过共享内存实现信息交换&am…...

React--》掌握react构建拖拽交互的技巧

在这篇文章中将深入探讨如何使用react-dnd&#xff0c;从基础的拖拽操作到更复杂的自定义功能带你一步步走向实现流畅、可控且用户友好的拖拽体验,无论你是刚接触拖拽功能的初学者还是想要精细化拖拽交互的经验开发者&#xff0c;都能从中找到适合自己的灵感和解决方案。 目录 …...

【Qt】常用的类与数据类型

目录 一、Qt常见基本数据类型 二、Qt 字符串类应用 2.1 操作字符串 2.2 查询字符串 三、QMap 类&QHash 类&QVector 类 3.1 QMap 类 3.2 QHash 类 3.3 QVector 类 四、QList 类&QLinkedList 类 4.1 QList 类 4.2 QLinkedList 类 4.3 STL 风格迭代器遍历…...

React实现B站评论Demo

该Demo涉及的技术点 useState函数&#xff08;数据驱动视图&#xff09;子组件的封装条件判断回调函数的封装 1、评论数据 {"list": [{"rpid": 3,"user": {"uid": "13258165","avatar": "http://toutiao.…...

从实列中学习linux shell12 通过Shell脚本来优化MySQL数据库性能,特别是慢SQL跟踪和索引优化

在Shell脚本中优化MySQL数据库性能&#xff0c;特别是慢SQL跟踪和索引优化 可以通过以下步骤实现。以下是一个结构化的解决方案&#xff0c;包含示例代码和详细说明&#xff1a; 1. 启用慢查询日志 目标&#xff1a;动态启用慢查询日志并配置参数&#xff0c;收集慢SQL数据。…...

ES6入门---第三单元 模块一:类、继承

补充&#xff1a; prototype 属性使您有能力向对象添加属性和方法。 object.prototype.namevalue <script>function Person(name, age){this.name name;this.age age;}/* Person.prototype.showName function(){return 名字为: ${this.name};};Person.prototype.showA…...

CSS 变量与原生动态主题实现

CSS 变量与原生动态主题实现 CSS 变量基础 CSS 变量&#xff08;自定义属性&#xff09;是 CSS 语言的一项强大功能&#xff0c;允许我们在样式表中定义和重用值。与 SCSS 或 LESS 等预处理器中的变量不同&#xff0c;CSS 变量在运行时计算&#xff0c;这意味着它们可以动态更…...

Ubuntu 安装 Docker

安装 Docker 1. 卸载旧版本&#xff08;如果有&#xff09; sudo apt-get remove docker docker-engine docker.io containerd runc 2. 更新 APT 包的索引 sudo apt-get update 3. 安装依赖包 sudo apt-get install -y \ca-certificates \curl \gnupg \lsb-release4. 添加…...

SpringMVC——第三章:获取请求数据

假设有这样一个请求&#xff1a;http://localhost:8080/springmvc/register?namezhangsan&password123&emailzhangsanpowernode.com 在SpringMVC中应该如何获取请求提交的数据呢&#xff1f; 在SpringMVC中又应该如何获取请求头信息呢&#xff1f; 在SpringMVC中又应…...

动静态库【Linux操作系统】

文章目录 动静态库制作静态库如何把第三方库安装在Linux系统中&#xff0c;如何使用第3方库方案一&#xff1a;为什么我们之前使用gcc/g编译C/C标准库的时候不用加选项-l xxx呢&#xff1f;方案二&#xff1a;方案三&#xff1a; 为什么不同平台的库不一样呢&#xff1f;动态库…...

Day 4:牛客周赛Round 91

好久没写了&#xff0c;问题还蛮多的。听说这次是苯环哥哥出题 F题 小苯的因子查询 思路 考虑求因子个数&#xff0c;用质因数分解&#xff1b;奇数因子只需要去掉质数为2的情况&#xff0c;用除法。 这里有个比较妙的细节是&#xff0c;提前处理出数字x的最小质因数&#xff0…...

drawDB:打造高效数据库设计流程

drawDB&#xff1a;打造高效数据库设计流程 drawDB 简介资源链接 核心功能详解1. 直观的实体关系图设计2. SQL 脚本生成3. SQL 导入功能4. 本地化存储与分享功能5. 自定义主题与外观 安装和使用教程本地开发环境搭建构建生产版本Docker 部署基本使用方法 应用场景和实际价值适用…...

【心海资源】子比主题新增注册与会员用户展示功能模块及实现方法

内容改写&#xff1a; 本次分享的是子比主题顶部展示注册用户与会员信息的功能模块及其实现方式。 你可以通过两种方式启用该功能&#xff1a; 直接在后台进入“外观 → 小工具”启用该展示模块&#xff0c;操作简便&#xff1b;也可将提供的代码覆盖至子比主题目录中&#…...

gitblit安装教程,搭建一个属于自己的Git版本仓库

本章教程,主要记录如何在Windows服务器上利用gitblit搭建GIT私有化仓库。 一、gitblit简介 官网地址:https://www.gitblit.com/ Gitblit 是一个开源的纯 Java 技术栈,用于管理、查看和服务Git仓库。 它主要设计为一款面向希望托管集中式仓库的小型工作组的工具。 二、基础环…...

2023年第十四届蓝桥杯省赛B组Java题解【简洁易懂】

2023年第十四届蓝桥杯省赛B组Java题解 题型概览与整体分析 题目编号题目名称题型难度核心知识点通过率&#xff08;预估&#xff09;A阶乘求和结果填空★☆☆模运算、数学规律95%B幸运数字结果填空★★☆进制转换、数位和计算80%C数组分割编程题★★☆组合数学、奇偶性分析65…...

Javase 基础加强 —— 01 异常

本系列为笔者学习Javase的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程&#xff0c;java零基础入门到大牛一套通关》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习Javase系列课程的同学们提供参考。 01 课程安排…...

iview 表单验证问题 Select 已经选择 还是弹验证提示

问题&#xff1a;iview 的 Select 下拉框的时候&#xff0c;数据验证必填&#xff0c;明明选择了数据&#xff0c;却一直提示验证不能通过 html代码&#xff1a; <Form ref"FormData" :model"FormData" :rules"ruleValidate" :label-width&qu…...

OrCAD中离图连接器、端口及网络标签的作用范围与选择指南

一、OrCAD主要连接元素概述 在OrCAD Capture原理图设计环境中&#xff0c;有三种主要的网络连接元素&#xff1a;离图连接器(Off-Page Connector)、端口(Port)和网络标签(Net Alias)。理解它们的作用范围和使用场景对设计清晰、可维护的原理图至关重要。 PS&#xff1a; 电源和…...

dpm_sysfs_add

这段代码是 Linux 内核中**设备电源管理&#xff08;PM&#xff09;子系统**与 **sysfs 文件系统**交互的核心实现&#xff0c;主要功能是为设备创建电源管理相关的 sysfs 属性文件。以下从五个关键维度进行深度解析&#xff1a; --- ### 一、功能架构全景 mermaid graph TD …...

【AI论文】Phi-4-reasoning技术报告

摘要&#xff1a;我们引入了Phi-4-reasoning&#xff0c;这是一种拥有140亿参数的推理模型&#xff0c;在复杂的推理任务中表现出了强大的性能。 通过监督式微调Phi-4&#xff0c;在精心策划的“可教”提示集上进行训练&#xff0c;这些提示集是根据复杂性和多样性的适当水平选…...

Android ART运行时无缝替换Dalvik虚拟机的过程分析

目录 一,概述 二,dex文件优化 一,概述 Android 4.4发布了一个ART运行时&#xff0c;准备用来替换掉之前一直使用的Dalvik虚拟机&#xff0c;希望籍此解决饱受诟病的性能问题。老罗不打算分析ART的实现原理&#xff0c;只是很有兴趣知道ART是如何无缝替换掉原来的Dalvik虚拟机…...

node.js为什么产生?

从官网得知介绍如下 https://nodejs.org/zh-cn/learn/getting-started/introduction-to-nodejs Node.js是一个开源和跨平台的JavaScript运行时环境。 Node.js在浏览器之外运行V8 JavaScript引擎&#xff0c;这是Google Chrome的核心。这使得Node.js具有很高的性能。 Node.js应…...

智能工厂边缘计算:从数据采集到实时决策

智能工厂边缘计算:从数据采集到实时决策 引言 在智能制造场景中,传统云计算架构面临三大核心挑战:平均200ms的网络延迟无法满足实时控制需求,90%的工业数据未被有效利用,以及每月高达15TB的数据传输成本。边缘计算技术通过将计算能力下沉到数据源头,正在构建"端-边…...

个人健康中枢的多元化AI网络革新与精准健康路径探析

引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…...

前端面试宝典---性能优化

一、加载优化 1. 第三方模块放在CDN 例如 leaflet通过cdn引入&#xff0c;这样就不会占用打包体积了 2. prefetch 预加载 例如&#xff0c;之后马上有个场景需要一个图片&#xff0c;我们就可以通过link 的 prefetch 对资源进行预先加载 再例如&#xff0c;我们公司是无网络开…...

【Springboot进阶】springboot+mybatis+jsqlparser实现数据权限控制

文章目录 SpringBoot JSqlParser MyBatis 数据权限实现方案一、环境准备1. 添加依赖 二、用户上下文管理1. 用户上下文持有类 三、数据权限拦截器实现1. MyBatis拦截器核心类 四、Spring Security集成1. 用户信息注入 五、配置项示例application.yml 六、使用示例1. 业务查询…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.3 窗口函数与高级聚合(ROW_NUMBER()/RANK()/SUM() OVER())

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL窗口函数与高级聚合:从排序到动态分析的全场景应用1. 窗口函数核心概念解析1.1 窗口函数语法结构1.2 核心组成要素2. 排名窗口函数深度解析2.1 ROW_NUMBER():唯一顺序排名示例演示2.2 `RANK…...

python全自动爬取m3u8网页视频(各类网站都通用)

当前人工智能&#xff0c;大语言模型的火热&#xff0c;使得python这门编程语言的使用越来越广泛。最近也开始学习了python&#xff0c;发现它在自动化方面的确有得天独厚的优势。python的简单易用&#xff0c;丰富的开源库&#xff0c;完善的生态&#xff0c;使得它有可能成为…...

C++负载均衡远程调用学习之上报功能与存储线程池

目录 1. Lars-reportV0.1 report模块介绍 2.Lars-reporterV0.1 reporter项目目录构建 3.Lars-ReporterV0.1 数据表和proto协议环境搭建 4.Lars-ReporterV0.1上报请求业务处理 5.Lars-ReporterV0.1上报请求模块的测试 6.Lars-ReporterV0.2开辟存储线程池-网络存储分离 1. L…...

今天python练习题

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 不要害怕失败&#xff0c;失败可能成为我们前进的动力&#xff01; 二、练习题 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9组成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…...

【leetcode100】最长递增子序列

1、题目描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 …...

R绘图|3分钟复现瑞士“苏黎世大学”Nature全球地图——基于R包ggplot2+sf等

一、引言 本文我们复现苏黎世大学团队Franois Keck等在Nature最新文章“The global human impact on biodiversity”中的全球地图。 之前的图纸是在平面坐标系里面进行绘制&#xff0c;本次我们在罗宾逊投影中进行绘制。整体代码逻辑非常简单&#xff0c;就是采样点坐标系的转换…...

百度系列产品学习

1.react-bmapgl封装逻辑 Map 分析react-bmapgl库中Map组件的封装流程&#xff0c;并以mermaid图展示。首先分析Map组件的核心实现&#xff0c;包括生命周期方法和子组件渲染逻辑。然后研究WrapperHOC和Component基类的封装模式&#xff0c;理解事件绑定和属性处理的通用逻辑。…...

高等数学第三章---微分中值定理与导数的应用(3.4~3.5)

3.4 函数的单调性与曲线的凹凸性 一、函数的单调性 1. 函数单调性定义回顾 设函数 f ( x ) f(x) f(x) 的定义域为 D D D&#xff0c;区间 I ⊆ D I \subseteq D I⊆D。 如果对任意 x 1 , x 2 ∈ I x_1, x_2 \in I x1​,x2​∈I&#xff0c;当 x 1 < x 2 x_1 < x…...

idea结合CopilotChat进行样式调整实践

一、前言&#xff1a; 本文主要分享在前端开发中借助AI能力调整样式&#xff0c;提高开发效率 对应视频【idea结合CopilotChat进行样式调整实践-哔哩哔哩】 二、实践&#xff1a; 2-1、现状确认&#xff1a; 表格上方新增了button、swtich、select组件&#xff0c;需要调整…...