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

递归专题训练详解(回溯,剪枝,深度优先)

1.汉诺塔问题

在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。

//确定子问题处理方式是相同的
//确定递归函数的函数头传参
//确定函数体也就子问题的处理方式
//判断函数出口class Solution {
public:void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {int n=A.size();dfs(A,B,C,n);}void dfs(vector<int>& A,vector<int>&B ,vector<int>& C,int n){if(n==1){C.push_back(A.back());//这里一定是要A.back(),可以画一下递归展开图A.pop_back();return;}//函数出口dfs(A,C,B,n-1);//不关心如何递归下去的,认为该函数一定能够帮我做到把a上的n-1数据借助c挪动b上C.push_back(A.back());//这里一定是要A.back(),可以画一下递归展开图A.pop_back();dfs(B,A,C,n-1);//同样认为该函数一定能把b上残留的n-1个数据借助a放到c上面}
};

2.合并升序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode* newHead=merge(list1,list2);return newHead;}ListNode* merge(ListNode* l1,ListNode* l2){if(l1==nullptr) return l2;if(l2==nullptr) return l1;if(l1->val<l2->val){l1->next=merge(l1->next,l2);return l1;//返回拼好的头节点}else{l2->next=merge(l2->next,l1);return l2;}}
};

3. 反转链表

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if(head==nullptr||head->next==nullptr)return head;ListNode* newhead=reverseList(head->next);//认为一定可以返回一个已经逆序的子链表head->next->next=head;//让已经逆序的子序列的头节点指向子序列的上一个头节点head->next=nullptr;return newhead;//这里newhead一直是没有移动过的,一直都是新的链表的头结点。}
};

4. 两两交换链表中的节点

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {if(head==nullptr||head->next==nullptr){return head;}ListNode* new_head=head->next;ListNode* tmp=head->next->next;//小心中途修改的问题head->next->next=head;head->next=swapPairs(tmp);return new_head;}
};

5. Pow(x,n)

  • -100.0 < x < 100.0
  • -2^31 <= n <= 2^31-1
  • -10^4 <= x^n <= 10^4

本题需要注意负数的情况和超int取值范围的情况

这样会语法报错。。。

class Solution {
public:double myPow(double x, int n) {return n > 0 ?pow(x,n) : 1.0/pow(x,-(long long)n );}double pow(double x,long long n){if(n==0) return 1.0;double ret=pow(x,n/2);if(n%2==0){return ret*ret;}else{return ret*ret*x;}}
};

6. 布尔逻辑二叉树

class Solution {
public:bool evaluateTree(TreeNode* root) {if(root->left==nullptr){if(root->val==1)return true; else return false;}bool left=evaluateTree(root->left);bool right=evaluateTree(root->right);if(root->val==2){return left || right;}else {return left && right;}}
};

7.根到叶子之和 

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。

每条从根节点到叶节点的路径都代表一个数字:

  • 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。

计算从根节点到叶节点生成的 所有数字之和 。

叶节点 是指没有子节点的节点。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*///函数头设计,我们认为传入一个节点,那么就会算出此节点到所有节点的数字之和
//函数体:从上一层获得此前的所有数字组合再拼上此层,所以需要多设计一个参数来记录
//函数出口:当没有孩子的时候
class Solution {
public:int sumNumbers(TreeNode* root) {return dfs(root,0);}int dfs(TreeNode* root,int presum){// if(root==nullptr)// {//     return presum;题目给的一定是有一个节点// }presum=presum*10+root->val;std::cout<<presum<<std::endl;int ret=0;//因为函数的功能是用来计算之和并返回,所以不能直接presum传入,此处presum只是用于记录已经遍历了的数字。if(root->left==nullptr&&root->right==nullptr){return presum;}if(root->left) ret+=dfs(root->left,presum);if(root->right) ret+= dfs(root->right,presum);return ret;}
};

8.二叉树剪枝

给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。

节点 node 的子树为 node 本身,以及所有 node 的后代。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
//函数体设计
//返回一个已经剪枝的根节点//函数出口:当自己是空的时候返回空,处理动作一致class Solution {
public:TreeNode* pruneTree(TreeNode* root) {// if(root==nullptr)// {//     return nullptr;// }if(root->left) root->left=pruneTree(root->left);if(root->right) root->right=pruneTree(root->right);if(root->left==nullptr&&root->right==nullptr&&root->val==0)//走到头才算是树枝当树枝被剪完了自己也就是树枝的。{//delete root;root=nullptr;// return nullptr;}return root;}
};

9.验证二叉搜索树(注意剪枝

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:
long long prev_val=LONG_MIN;bool isValidBST(TreeNode* root) {if(root==nullptr){return true;}bool left=isValidBST(root->left);if(left==false) return false;//剪枝bool cur=false;if(root->val>prev_val){prev_val=root->val;cur=true;}if(right==false) return false;//剪枝bool right=isValidBST(root->right);//cout<< root->val;return left&&right&&cur;}
};

10. 二叉搜索树第k小的元素(二叉搜索树中序遍历是一个有序序列)

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int count;int ret;int kthSmallest(TreeNode* root, int k) {count=k;return dfs(root);}int dfs(TreeNode* root){if(root==nullptr){return ret;}ret=dfs(root->left);if(count==0){return ret;}ret=root->val;count--;ret=dfs(root->right);return ret;}
};

11. 二叉树的所有路径

12. 全排列

1.此处path设置为全局变量更好,虽然回溯时需要修改,但是节省一些空间并且效率更高。:

class Solution {
public:vector<vector<int>> ret;vector<bool> check;//用于记录哪些数字使用过了而达到剪枝的效果,回溯的时候需要把使用过的数字还回去vector<int> path;//这里的path最好使用全局变量vector<vector<int>> permute(vector<int>& nums) {check.resize(nums.size());dfs(nums,path);return ret;}void dfs(vector<int>& nums,vector<int> path){if(nums.size()==path.size()){ret.push_back(path);return ;}for(int i=0;i<nums.size();i++){if(check[i]==true){continue;}check[i]=true;vector<int> tmp=path;tmp.push_back(nums[i]);dfs(nums,tmp);check[i]=false;}}
};

2. 修改后:

class Solution {
public:vector<vector<int>> ret;vector<bool> check;//用于记录哪些数字使用过了而达到剪枝的效果,回溯的时候需要把使用过的数字还回去vector<int> path;//这里的path最好使用全局变量vector<vector<int>> permute(vector<int>& nums) {check.resize(nums.size());dfs(nums,path);return ret;}void dfs(vector<int>& nums,vector<int>& path){if(nums.size()==path.size()){ret.push_back(path);return ;}for(int i=0;i<nums.size();i++){if(check[i]==true){continue;}check[i]=true;// vector<int> tmp=path;// tmp.push_back(nums[i]);path.push_back(nums[i]);dfs(nums,path);check[i]=false;//向下递归完后恢复现场path.pop_back();}}
};

13. 二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

13. 二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<string> ret;string path;int i=0;vector<string> binaryTreePaths(TreeNode* root) {if(root==nullptr) return ret;//假设会传入空,最好不要写在dfs函数里面dfs(root,path);return ret;}void dfs(TreeNode* root,string path){path+=to_string(root->val);if(root->left==nullptr&&root->right==nullptr){ret.push_back(path);return;}path+="->";if(root->left) dfs(root->left,path);if(root->right) dfs(root->right,path);//剪枝,并且达到了不会传入空的效果}
};

14. 子集

class Solution {
public:vector<vector<int>> ret;vector<int> path;//vector<bool> check;vector<vector<int>> subsets(vector<int>& nums) {dfs(nums,0);return ret;}void dfs(vector<int>& nums ,int pos){ret.push_back(path);for(int i=pos;i<nums.size();i++){path.push_back(nums[i]);dfs(nums,i+1);path.pop_back();}}
};

15. 异或和按位或分清楚

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

class Solution {
public:int ret;//返回值总和int tmp=0;//记录当前层异或的值int subsetXORSum(vector<int>& nums) {dfs(nums,0);return ret;}void dfs(vector<int>& nums,int pos){ret+=tmp;for(int i=pos;i<nums.size();i++){tmp^=nums[i];dfs(nums,i+1);tmp^=nums[i];}}
};

16. 全排列 ||

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

class Solution {
public:vector<vector<int>> ret;vector<bool> check;vector<int> path;vector<vector<int>> permuteUnique(vector<int>& nums) {sort(nums.begin(),nums.end());check.resize(nums.size(),false);//没有上句会报错Line 84: Char 2: runtime error: store to null pointer of type 'std::_Bit_type' (aka 'unsigned long') (stl_bvector.h)dfs(nums);return ret;}void dfs(vector<int>& nums){if(path.size()==nums.size()){ret.push_back(path);return;}for(int i=0;i<nums.size();i++){if(check[i]==true ||( i!=0 && nums[i]==nums[i-1] && check[i-1] == false ))//check[i-1]==false;说明nums[i]和nums[i-1]同层进行判断比较。{continue;}check[i]=true;path.push_back(nums[i]);dfs(nums);check[i]=false;path.pop_back();}}
};

17. 电话号码

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

class Solution {
public:vector<string> ret;string path;vector<string> hash={" ", " ", "abc", "def", "ghi","jkl","mno","pqrs","tuv","wxyz"};vector<string> letterCombinations(string digits) {if(digits.size()==0){return ret;}dfs(digits,0);return ret;}void dfs(string& digits,int pos){if(path.size()==digits.size()){ret.push_back(path);return;}for(auto a: hash[digits[pos]-'0'] ){path.push_back(a);dfs(digits,pos+1);path.pop_back();}}
};

18. 括号生成

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

class Solution {
public:int max;int left,right;vector<string> ret;string path;vector<string> generateParenthesis(int n){max=n;dfs();return ret;}void dfs(){if(right == max){ret.push_back(path);return;}if(left < max){path.push_back('(');++left;dfs();--left;path.pop_back();}if(right < left){path.push_back(')');right++;dfs();right--;path.pop_back();}}
};

19. 组合

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

class Solution {
public:int max;vector<int> path;vector<vector<int>> ret;vector<vector<int>> combine(int n, int k) {max=k;dfs(1,n);return ret;}void dfs(int pos,int& n){if(path.size() == max ){ret.push_back(path);return;}for(int i=pos;i<n+1;++i){path.push_back(i);dfs(i+1,n);//是要传入i+1而不是pos+1path.pop_back();}}
};

20.目标和

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

注意单单int的反复加加减减还是非常耗时的,这里不是拷贝一个vector之类的对象,所以反而恢复现场的操作会更慢从而超时。

class Solution {
public:// int ret=0;// int path;// int now_target;// int findTargetSumWays(vector<int>& nums, int target) // {//     now_target=target;//     dfs(0,1,nums);//     return ret;// }// void dfs(int pos,int level,vector<int>& nums)// {//     if(nums.size()+1 == level)//     {//         if(path==now_target)//         {//             ret++;//         }//         return;//     }//     {//         path+=nums[pos];//         dfs(pos+1,level+1,nums);//         path-=nums[pos];//     }//     {//         path-=nums[pos];//         dfs(pos+1,level+1,nums);//         path+=nums[pos];//     }// }int ret=0;//int path;int now_target;int findTargetSumWays(vector<int>& nums, int target) {int path=0;now_target=target;dfs(0,1,nums,path);return ret;}void dfs(int pos,int level,vector<int>& nums,int path){if(nums.size()+1 == level){if(path==now_target){ret++;}return;}{//path+=nums[pos];dfs(pos+1,level+1,nums,path+nums[pos]);//path-=nums[pos];}{dfs(pos+1,level+1,nums,path-nums[pos]);}}};

相关文章:

递归专题训练详解(回溯,剪枝,深度优先)

1.汉诺塔问题 在经典汉诺塔问题中&#xff0c;有 3 根柱子及 N 个不同大小的穿孔圆盘&#xff0c;盘子可以滑入任意一根柱子。一开始&#xff0c;所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: (1) 每次只能移动…...

JavaScript系列从入门到精通系列第七篇:JavaScrip当中的运算符,主要涉及JavaScript当中的六大数据类型的四则运算

文章目录 前言 一&#xff1a;算数运算符 1&#xff1a;Number类型的四则运算 2&#xff1a;其他数据类型的四则运算 (一)&#xff1a;加法运算 (二)&#xff1a;减法运算 3&#xff1a;乘法运算 4&#xff1a;除法运算 5&#xff1a;取模运算 前言 运算符也叫操作符。…...

计算机网络 实验二 交换机的基本配置

实验二 交换机的基本配置 实验目的 • 掌握交换机的配置方式及切换命令&#xff1b; • 掌握交换机端口的基本配置&#xff1b; • 掌握交换机mac地址的查看与管理方法。 实验设备 以太网交换机一台服务器一台PC机五台配置电缆、网线若干 网络拓扑及IP地址分配 给计算…...

Tor网络的全面解析

一、Tor网络概述 Tor网络&#xff0c;即“洋葱路由器”&#xff08;The Onion Router&#xff09;&#xff0c;是一种用于保护用户隐私、避免网络监控的开源软件&#xff0c;可以实现匿名访问互联网。 Tor网络通过多重加密和随机转发&#xff0c;将用户的流量从多个节点中进行…...

数据集笔记:2015上海地铁一卡通数据

数据地址&#xff1a;上海地铁数据_免费高速下载|百度网盘-分享无限制 (baidu.com) 数据介绍 上海2015年几天的地铁一卡通出入站信息 卡号、交易日期、交易时间、公交线路/地铁站点中文名称、行业名称(公交、地铁、出租、轮渡、PR停车场)、交易金额、交易性质(非优惠、优惠、…...

【小沐学C++】C++ 基于Premake构建工程项目(Windows)

文章目录 1、简介2、下载和安装2.1 下载2.3 快速入门 3、使用3.1 支持的工程文件Project Files3.2 构建设置Build Settings3.3 链接Linking3.4 配置Configurations3.5 平台Platforms3.6 过滤Filters3.7 预设值Tokens 4、测试4.1 测试1&#xff1a;入门例子4.2 测试2&#xff1a…...

Linux shell编程学习笔记2:我是谁 | who am i ?

〇、更新记录 20230926 补充例子2 一、前言 由于Linux系统的shell有许多种&#xff1a;sh、bash、cshell、tcsh、zsh……这些shell以sh为基础对象&#xff0c;在保持兼容性时又各有有创建&#xff0c;形成自己的功能特点&#xff0c;要想让我们编写的shell代码正确、可靠运行…...

移动端和PC端对比【组件库+调试vconsole +单位postcss-pxtorem+构建vite/webpack+可视化echarts/antv】

目录 组件库 移动端 vue vant PC端 react antd vue element 调试&#xff1a;vconsole vs dev tools中的控制台&#xff08;Console&#xff09; vconsole&#xff1a;在真机上调试 postcss-pxtorem&#xff1a;移动端不同的像素密度 构建工具 webpack 原理 Ba…...

maven多模块依赖包程序包xxx不存在

背景 rpc-common 被 rpc-server、rpc-client依赖 项目地址 https://github.com/pjmike/springboot-rpc-demo mvn clean install 打包时报错 报错信息 程序包xxxx不存在 找不到符号 原因分析 原因还不清楚&#xff0c;网友们帮解答一下 解决 主pom.xml 添加 <packaging…...

iOS17.0.2更新修复iPhone 15系列机型数据迁移问题,附新机快速数据迁移办法!

iPhone 15 系列机型已于今日正式发售&#xff0c;为解决iPhone15这些机型出现的数据迁移问题&#xff0c;苹果紧急发布了 iOS 17.0.2 更新&#xff0c;内部版本号为 21A350。 需要注意的是&#xff0c; iOS 17.0.2 更新仅适用于 iPhone 15、iPhone 15 Plus、iPhone 15 Pro 和 …...

面试题库(八):docker和linux

docker docker的原理?dockerfile里面用过什么命令?用过docker?dockerfile写过吗,常用命令,说下分层原理docker 部署有什么好处?docker 的底层原理是什么?namespace 和 cgroups,一个隔离环境,一个控制资源配额。那隔离环境主要隔离什么环境?docker镜像和容器有什么区别…...

深入理解传输层协议:TCP与UDP的比较与应用

目录 前言什么是TCP/UDPTCP/UDP应用TCP和UDP的对比总结 前言 传输层是TCP/IP协议栈中的第四层&#xff0c;它为应用程序提供服务&#xff0c;定义了主机应用程序之间端到端的连通性。在本文章&#xff0c;我们将深入探讨传输层协议&#xff0c;特别是TCP和UDP协议的原理和区别…...

Python-表白小程序练习

测试代码 在结果导向的今天&#xff0c;切勿眼高于顶&#xff0c;不论用任何方法能转换、拿出实际成果东西才是关键&#xff0c;即使一个制作很简易的程序&#xff0c;你想将其最终生成可运行的版本也是需要下一番功夫的。不要努力成为一个嘴炮成功者,要努力成为一个有价值的人…...

浅谈ChatGPT附免费体验地址

首先&#xff0c;让我来介绍一下ChatGPT是什么。ChatGPT是由OpenAI开发的大型语言模型&#xff0c;它代表着自然语言处理领域的最新进展。这个模型是通过大量的数据和先进的深度学习技术训练而成&#xff0c;具备了强大的语言理解和生成能力。 那么&#xff0c;ChatGPT能做些什…...

队列的使用以及模拟实现(C++版本)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…...

RV1126笔记四十一:RV1126移植LIVE555

若该文为原创文章,转载请注明原文出处。 RV1126的SDK有提供了一个librtsp.a封装好的RTSP推流库,但不开源,还有个确定延时长,所以想自己写一个RTSP的推流,但不想太麻烦,所以使用Live555。 记录下移植过程和测试结果。 live555需要用到的包有 openssl 和live555 一、 编…...

stable diffusion模型评价框架

GhostReview:全球第一套AI绘画ckpt评测框架代码 - 知乎大家好&#xff0c;我是_GhostInShell_&#xff0c;是全球AI绘画模型网站Civitai的All Time Highest Rated (全球历史最高评价) 第二名的GhostMix的作者。在上一篇文章&#xff0c;我主要探讨自己关于ckpt的发展方向的观点…...

电脑开机慢问题的简单处理

电脑用久了&#xff0c;开机时间要10-20分钟特别慢&#xff0c;一下介绍两种简单有效处理方式&#xff0c;这两种方式经测试不会影响原系统软件的使用&#xff1a; 方式一&#xff1a;禁用非必要启动项【效果不是很明显】 利用360里面的优化加速禁用启动项【禁用启动项还有其…...

SpringMVC-Rest风格

一、简介 REST&#xff08;Representational State Transfer&#xff09;&#xff0c;表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候&#xff0c;可以使用两种方式: 传统风格资源描述形式 http://localhost/user/getById?id1 查询id为1的用户信息…...

WebGL实现透明物体(α混合)

目录 α混合 如何实现α混合 1. 开启混合功能&#xff1a; 2. 指定混合函数 混合函数 gl.blendFunc&#xff08;&#xff09;函数规范 可以指定给src_factor和dst_factor的常量 混合后颜色的计算公式 加法混合 半透明的三角形&#xff08;LookAtBlendedTriangl…...

RecycleView刷新功能

RecycleView刷新某一个Item&#xff0c;或这某一个Item中某一个View。 这样的需求&#xff0c;在实际的开发中是很普遍的。 在数据变化后需要刷新列表。 刷新列表有三种方式&#xff1a; 前两种大家应该很熟&#xff0c;第三中会有点陌生。 那么这三种方式&#xff0c;有什…...

目标检测如何演变:从区域提议和 Haar 级联到零样本技术

目录 一、说明 二、目标检测路线图 2.1 路线图&#xff08;一般&#xff09; 2.2 路线图&#xff08;更传统的方法&#xff09; 2.3 路线图&#xff08;深度学习方法&#xff09; 2.4 对象检测指标的改进 三、传统检测方法 3.1 维奥拉-琼斯探测器 (2001) 3.2 HOG探测器…...

聊一聊国内大模型公司,大模型面试心得、经验、感受

有着过硬的技术却无处可用是不是很苦恼呢&#xff0c;大家在面试时是不是也积累了一些经验呢&#xff0c;本文详细总结了大佬在大模型面试时的一些经验及感悟&#xff0c;希望对大家面试找工作有所帮助。 2023年&#xff0c;大模型突然国内火了起来&#xff0c;笔者就面了一些…...

【分布式微服务】feign 异步调用获取不到ServletRequestAttributes

公司调用接口的时候使用feign,但是服务之间还是使用了鉴权,需要通过RequestInterceptor 去传递uuid 概念 OpenFeign是一个声明式的Web服务客户端,它使得编写HTTP客户端变得更简单。在使用OpenFeign进行异步调用时,你可以通过配置来实现。但是,如果你在配置或调用过程中遇…...

c#编程里面最复杂的技术问题有哪些

C#编程中最复杂的技术问题通常涉及高级主题和复杂的应用场景。以下是一些可能被认为是C#编程中最复杂的技术问题&#xff1a; 1. **多线程和并发编程&#xff1a;** 处理多线程和并发问题涉及到锁定、线程同步、死锁避免、线程安全性和性能优化等方面的知识。编写高效且线程安…...

github代码提交过程详细介绍

1、下载github上面的代码 &#xff08;1&#xff09;在github网站上&#xff0c;找到想要下载的代码仓库界面&#xff0c;点击Code选项就可以看到仓库的git下载地址&#xff1b; &#xff08;2&#xff09;使用命令下载&#xff1a;git clone 地址&#xff1b; 2、配置本地git…...

Linux -- 使用多张gpu卡进行深度学习任务(以tensorflow为例)

在linux系统上进行多gpu卡的深度学习任务 确保已安装最新的 TensorFlow GPU 版本。 import tensorflow as tf print("Num GPUs Available: ", len(tf.config.list_physical_devices(GPU)))1、确保你已经正确安装了tensorflow和相关的GPU驱动&#xff0c;这里可以通…...

Mendix中的依赖管理:npm和Maven的应用

序言 在传统java开发项目中&#xff0c;我们可以利用maven来管理jar包依赖&#xff0c;但在mendix项目开发Custom Java Action时&#xff0c;由于目录结构有一些差异&#xff0c;我们需要自行配置。同样的&#xff0c;在mendix项目开发Custom JavaScript Action时&#xff0c;…...

自定义hooks之useLastState、useSafeState

自定义hooks之useLastState、useSafeState useLastState 在某些情况下&#xff0c;可能需要知道状态的历史值&#xff0c;例如&#xff0c;希望在状态变化时执行某些操作&#xff0c;但又需要访问上一个状态的值&#xff0c;以便进行比较或其他操作。自定义 React Hook 可以帮…...

前端判断: []+[], []+{}, {}+[], {}+{}

本质: 二元操作符规则 一般判断规则: 如果操作数是对象,则对象会转换为原始值如果其中一个操作数是字符串的话,另一个操作数也会转换成字符串,进行字符串拼接否则,两个操作数都将转换成数字或NaN,进行加法操作 转为原始数据类型的值的方法: Symbol.ToPrimitiveObject.protot…...

做mv主题网站/网站怎么优化关键词快速提升排名

https://zhuanlan.zhihu.com/p/29150809 一、数据库有锁机制的原因。 数据库锁定机制简单来说&#xff0c;就是数据库为了保证数据的一致性和有效性&#xff0c;而使各种共享资源在被并发访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制&#xff…...

源码做网站教程/百度推广优化技巧

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼最近学习CUDA C的编程&#xff0c;在并行运行一个简单的解调算法的时候&#xff0c;统计时间后发现运行速度越来越慢(但还是运算结果正确的)&#xff0c;后来简化到只运行其中一个核函数的时候&#xff0c;就算复杂度下降了&#x…...

html5官方网站开发流程/引流推广公司

记得自己最初的梦想就是想投入到web前端的开发中来&#xff0c;正如我博客名字“准前端工程师”&#xff0c;曾经也幻想着能在web领域闯出一片自己的新天地&#xff0c;现在回过头来看看曾经的我&#xff0c;确实是活的如此迷茫以及随波逐流&#xff0c;同时也感谢我的第一份实…...

建设网站销售/推广网站公司

我用来绕过“完整路径和文件名”长度限制以移动&#xff0c;复制或删除某些内容的一个技巧是&#xff0c;通过使用指向文件夹的映射驱动器号 “中途”(或更多)“ 插入 ”来缩短它顺路。所以你有c&#xff1a;\ some \ long \ path ... \ and \ foo \ bar \ folders \ oldfiles …...

工业设计网站外网/seo外链网

【1】决定多长时间启动所有线程。如果使用10个线程&#xff0c;ramp-up period是100秒&#xff0c;那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒&#xff08;100/10&#xff09;启动。Ramp-up需要充足长以避免在启动测试时有一个太大的工作负…...

公司网站主机流量30g每月够用吗/小企业广告投放平台

2019独角兽企业重金招聘Python工程师标准>>> 在某些状况下&#xff0c;类内成员变量需要动态开辟堆内存&#xff0c;如果实行位拷贝&#xff0c;也就是把对象里的值完全复制给另一个对象&#xff0c;如AB。这时&#xff0c;如果B中有一个成员变量指针已经申请了内存…...