剑指Offer-搜索与回溯算法
文章目录
- 剑指 Offer 32 - I. 从上到下打印二叉树
- 题意:
- 解:
- 代码:
- 剑指 Offer 32 - II. 从上到下打印二叉树 II
- 题意:
- 解:
- 代码:
- 剑指 Offer 32 - III. 从上到下打印二叉树 III
- 题意:
- 解:
- 代码:
- 剑指 Offer 26. 树的子结构
- 题意:
- 解:
- 代码:
- 剑指 Offer 27. 二叉树的镜像-08
- 题意:
- 解:
- 代码:
- 剑指 Offer 28. 对称的二叉树
- 题意:
- 解:
- 代码:
- 剑指 Offer 12. 矩阵中的路径
- 题意:
- 解:
- 代码:
- 剑指 Offer 13. 机器人的运动范围
- 题意:
- 解:
- 代码:
- 剑指 Offer 34. 二叉树中和为某一值的路径
- 题意:
- 解:
- 代码:
- 剑指 Offer 36. 二叉搜索树与双向链表-09
- 题意:
- 解:
- 代码:
- 剑指 Offer 54. 二叉搜索树的第k大节点
- 题意:
- 解:
- 代码:
- 剑指 Offer 55 - I. 二叉树的深度
- 题意:
- 解:
- 代码:
- 剑指 Offer 55 - II. 平衡二叉树
- 题意:
- 解:
- 代码:
- 剑指 Offer 64. 求1+2+…+n
- 题意:
- 解:
- 代码:
- 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先-10
- 题意:
- 解:
- 代码:
- 剑指 Offer 68 - II. 二叉树的最近公共祖先
- 题意:
- 解:
- 代码:
- 剑指 Offer 37. 序列化二叉树
- 题意:
- 解:
- 代码:
- 剑指 Offer 38. 字符串的排列-11
- 题意:
- 解:
- 代码:
剑指 Offer 32 - I. 从上到下打印二叉树
题意:
剑指 Offer 32 - I. 从上到下打印二叉树
解:
BFS板子
代码:
#include<bits/stdc++.h>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<int> levelOrder(TreeNode* root)
{vector<int>ret;if(root==nullptr) return ret; queue<TreeNode*>qe;qe.push(root);while(true){queue<TreeNode*>next;while(!qe.empty()){TreeNode* now=qe.front();qe.pop();ret.push_back(now->val);if(now->left) next.push(now->left);if(now->right) next.push(now->right);}qe=next;if(qe.empty()) break;}return ret;
}
int main()
{return 0;
}
剑指 Offer 32 - II. 从上到下打印二叉树 II
题意:
剑指 Offer 32 - II. 从上到下打印二叉树 II
解:
第一题基础上分层存储=-=
代码:
#include<bits/stdc++.h>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<vector<int>> levelOrder(TreeNode* root)
{vector<vector<int>>ret;if(root==nullptr) return ret; queue<TreeNode*>qe;qe.push(root);while(true){queue<TreeNode*>next;vector<int>temp; while(!qe.empty()){TreeNode* now=qe.front();qe.pop();temp.push_back(now->val);if(now->left) next.push(now->left);if(now->right) next.push(now->right);}ret.push_back(temp);qe=next;if(qe.empty()) break;}return ret;
}
int main()
{return 0;
}
剑指 Offer 32 - III. 从上到下打印二叉树 III
题意:
剑指 Offer 32 - III. 从上到下打印二叉树 III
解:
奇变偶不变
代码:
#include<bits/stdc++.h>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<vector<int>> levelOrder(TreeNode* root)
{vector<vector<int>>ret;bool zt=0;if(root==nullptr) return ret; queue<TreeNode*>qe;qe.push(root);while(true){queue<TreeNode*>next;vector<int>temp; while(!qe.empty()){TreeNode* now=qe.front();qe.pop();temp.push_back(now->val);if(now->left) next.push(now->left);if(now->right) next.push(now->right);}if(zt) reverse(temp.begin(),temp.end());ret.push_back(temp);qe=next;if(qe.empty()) break;zt=!zt;}return ret;
}
int main()
{return 0;
}
剑指 Offer 26. 树的子结构
题意:
剑指 Offer 26. 树的子结构
求树B是不是A的子结构
解:
卡了一下47案例看了半天,原来是判断是否相等Cmp
的时候不能看A有没有子节点,而是要看B有没有子节点,铸币了
递归DFS,判断相等,两个函数很像但是初始值不同,有趣的
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool myCmp(TreeNode* A, TreeNode* B)
{bool ret=true;if(A==nullptr||B==nullptr) return false;if(A->val!=B->val) return false;if(B->left!=nullptr) ret&=myCmp(A->left,B->left);if(B->right!=nullptr) ret&=myCmp(A->right,B->right);/* WA 47/48if(A->left!=nullptr||B->left!=nullptr) ret&=myCmp(A->left,B->left);if(A->right!=nullptr||B->right!=nullptr) ret&=myCmp(A->right,B->right);*/return ret;
}
bool isSubStructure(TreeNode* A, TreeNode* B)
{if(A==nullptr||B==nullptr) return false;bool ans=false;if(A->val==B->val) ans|=myCmp(A,B);if(ans) return ans;if(A->left!=nullptr) ans|=isSubStructure(A->left,B);if(A->right!=nullptr) ans|=isSubStructure(A->right,B);return ans;
}
int main()
{return 0;
}
剑指 Offer 27. 二叉树的镜像-08
题意:
剑指 Offer 27. 二叉树的镜像
构造镜像树
解:
基本操作
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void treeCopy(TreeNode* newRoot,TreeNode* root)
{if(root->left!=nullptr){newRoot->right=new TreeNode(root->left->val);treeCopy(newRoot->right,root->left);}if(root->right!=nullptr){newRoot->left=new TreeNode(root->right->val);treeCopy(newRoot->left,root->right);}
}
TreeNode* mirrorTree(TreeNode* root)
{if(root==nullptr) return nullptr;TreeNode* newRoot=new TreeNode(root->val);treeCopy(newRoot,root);return newRoot;
}
int main()
{return 0;
}
剑指 Offer 28. 对称的二叉树
题意:
剑指 Offer 28. 对称的二叉树
判断是否是对称的二叉树
解:
直接在26题WA代码的基础上改,自己和自己比
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool myCmp(TreeNode* A, TreeNode* B)
{bool ret=true;if(A==nullptr||B==nullptr) return false;if(A->val!=B->val) return false;if(A->left!=nullptr||B->right!=nullptr) ret&=myCmp(A->left,B->right);if(A->right!=nullptr||B->left!=nullptr) ret&=myCmp(A->right,B->left);return ret;
}
bool isSymmetric(TreeNode* root)
{if(root==nullptr) return false;bool ans=false;ans|=myCmp(root,root);return ans;
}
int main()
{return 0;
}
剑指 Offer 12. 矩阵中的路径
题意:
剑指 Offer 12. 矩阵中的路径
找字符矩阵中是否有一条线路能构成给定字符串
解:
DFS
代码:
#include<bits/stdc++.h>
using namespace std;
bool check(int i,int j,const vector<vector<bool>>& book,const int& n,const int& m)
{if(i<0||i>=n) return false;if(j<0||j>=m) return false;if(book[i][j]==1) return false;return true;
}
bool dfs(int i,int j,int mao,const vector<vector<char>>& board,vector<vector<bool>>& book,const string& word,const int& n,const int& m)
{bool ans=false;if(mao==word.size()) return true;if(check(i+1,j,book,n,m) && board[i+1][j]==word[mao]){book[i+1][j]=1;ans|=dfs(i+1,j,mao+1,board,book,word,n,m);book[i+1][j]=0;}if(check(i-1,j,book,n,m) && board[i-1][j]==word[mao]){book[i-1][j]=1;ans|=dfs(i-1,j,mao+1,board,book,word,n,m);book[i-1][j]=0;}if(check(i,j+1,book,n,m) && board[i][j+1]==word[mao]){book[i][j+1]=1;ans|=dfs(i,j+1,mao+1,board,book,word,n,m);book[i][j+1]=0;}if(check(i,j-1,book,n,m) && board[i][j-1]==word[mao]){book[i][j-1]=1;ans|=dfs(i,j-1,mao+1,board,book,word,n,m);book[i][j-1]=0;}return ans;
}
bool exist(vector<vector<char>>& board, string word)
{int n=board.size(),m=board[0].size();vector<vector<bool>>book(n,vector<bool>(m));bool ans=false;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(board[i][j]==word[0]){book[i][j]=1;if(ans) break;ans|=dfs(i,j,1,board,book,word,n,m);book[i][j]=0;}}}return ans;
}
int main()
{string word;int n,m;cin>>n>>m;vector<vector<char>> board(n,vector<char>(m));for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>board[i][j];}}cin>>word;bool ans=exist(board,word);cout<<boolalpha<<ans<<endl;return 0;
}
剑指 Offer 13. 机器人的运动范围
题意:
剑指 Offer 13. 机器人的运动范围
坐标各位和大于K的格子禁止机器人今日,机器人每次只能走相邻的格子,求有多少个格子可以到达
解:
DFS
代码:
#include<bits/stdc++.h>
using namespace std;
int pointTonum(int i,int j)
{int ret=0;while(i) { ret+=i%10;i/=10; }while(j) { ret+=j%10;j/=10; }return ret;
}
bool check(int i,int j,const int& m,const int& n,const int &k,const vector<vector<bool>>& book)
{if(i<0||i>=m) return false;if(j<0||j>=n) return false;if(book[i][j]==1) return false;return true;
}
void dfs(int&ans,int i,int j,const int& m,const int& n,const int& k,vector<vector<bool>>& book)
{ans++;book[i][j]=1;if(check(i+1,j,m,n,k,book)) dfs(ans,i+1,j,m,n,k,book);if(check(i,j+1,m,n,k,book)) dfs(ans,i,j+1,m,n,k,book);if(check(i-1,j,m,n,k,book)) dfs(ans,i-1,j,m,n,k,book);if(check(i,j-1,m,n,k,book)) dfs(ans,i,j-1,m,n,k,book);
}
int movingCount(int m, int n, int k)
{int ans=0;vector<vector<bool>>book(m,vector<bool>(n));for(int i=0;i<m;i++){for(int j=0;j<n;j++){int t=pointTonum(i,j);if(t>k) book[i][j]=1;}}dfs(ans,0,0,m,n,k,book);return ans;
}
int main()
{int n,m,k;cin>>n>>m>>k;int ans=movingCount(n,m,k);cout<<ans<<endl;return 0;
}
剑指 Offer 34. 二叉树中和为某一值的路径
题意:
剑指 Offer 34. 二叉树中和为某一值的路径
一条路径需要从根节点到叶子结点,求和为K的所有路径
解:
DFS
代码:
#include<bits/stdc++.h>
using namespace std;
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) {}
};
void dfs(TreeNode* now,int target,vector<vector<int>>& ans,vector<int>temp=vector<int>())
{temp.push_back(now->val);target-=now->val;if(target==0&&now->left==nullptr&&now->right==nullptr){ans.push_back(temp);return;}if(now->left!=nullptr) dfs(now->left,target,ans,temp);if(now->right!=nullptr) dfs(now->right,target,ans,temp);
}
vector<vector<int>> pathSum(TreeNode* root, int target)
{vector<vector<int>>ans;if(root==nullptr) return ans;dfs(root,target,ans);return ans;
}
int main()
{return 0;
}
剑指 Offer 36. 二叉搜索树与双向链表-09
题意:
剑指 Offer 36. 二叉搜索树与双向链表
将一个二层搜索树变成有序双向链表
解:
中序遍历+链表操作
代码:
#include<bits/stdc++.h>
using namespace std;
class Node {
public:int val;Node* left;Node* right;Node() {}Node(int _val) {val = _val;left = NULL;right = NULL;}Node(int _val, Node* _left, Node* _right) {val = _val;left = _left;right = _right;}
};
Node* head,*last;
void dfs(Node* root)
{if(root->left!=nullptr) dfs(root->left);if(head==nullptr){head=root;last=root;}else{last->right=root;root->left=last;last=root;}if(root->right!=nullptr) dfs(root->right);
}
Node* treeToDoublyList(Node* root)
{if(root==nullptr) return root;dfs(root);head->left=last;last->right=head;return head;
}
int main()
{return 0;
}
剑指 Offer 54. 二叉搜索树的第k大节点
题意:
剑指 Offer 54. 二叉搜索树的第k大节点
如题
解:
倒序的中序遍历
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int dfs(TreeNode* root,int& t,const int& k)
{int ret=0;if(root->left!=nullptr) ret+=dfs(root->left,t,k);t++;if(t==k) return root->val;if(root->right!=nullptr) ret+=dfs(root->right,t,k);
}
int kthLargest(TreeNode* root, int k)
{int t=0;int ans=dfs(root,t,k);return ans;
}
int main()
{return 0;
}
剑指 Offer 55 - I. 二叉树的深度
题意:
剑指 Offer 55 - I. 二叉树的深度
如题
解:
DFS/BFS都行
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int dfs(TreeNode* root)
{int ret=0;if(root->left!=nullptr) ret=max(ret,dfs(root->left));if(root->right!=nullptr) ret=max(ret,dfs(root->right));return ret+1;
}
int maxDepth(TreeNode* root)
{if(root==nullptr) return 0;int ans=dfs(root);return ans;
}
int main()
{return 0;
}
剑指 Offer 55 - II. 平衡二叉树
题意:
剑指 Offer 55 - II. 平衡二叉树
判断一颗二叉树是否平衡
解:
DFS,和55差不多,做一个不合法跳出就行
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int dfs(TreeNode* root)
{int left=0,right=0;if(root->left!=nullptr) left=dfs(root->left);if(root->right!=nullptr) right=dfs(root->right);if(left==-99||right==-99) return -99;if(abs(left-right)>1) return -99;return max(left,right)+1;
}
bool isBalanced(TreeNode* root)
{if(root==nullptr) return true;int ans=dfs(root);if(ans!=-99) return true;else return false;
}
int main()
{return 0;
}
剑指 Offer 64. 求1+2+…+n
题意:
剑指 Offer 64. 求1+2+…+n
如题,不允许循环和条件
解:
妙用&&的短路现象
代码:
#include<iostream>
using namespace std;
int sumNums(int n)
{int sum=0;n && (sum=n+sumNums(n-1));return sum;
}
int main()
{int n;cin>>n;int ans=sumNums(n);cout<<ans<<endl;return 0;
}
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先-10
题意:
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
给一颗二叉搜索树,和在树中的两个值,求他们的最近公共祖先
解:
对于一个节点,如果两个值一左一右,那么这个值就是他们的最近公共祖先,否则就往那一支里面找
一个节点也可以是它自己的祖先,所以遍历到其中一个的时候就是他们的最近公共祖先
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
{if(p->val>q->val) swap(p,q);if(root->val==p->val||root->val==q->val) return root;if(root->val>p->val&&root->val<p->val) return root;if(root->val>p->val&&root->val>p->val) return lowestCommonAncestor(root->left,p,q);if(root->val<p->val&&root->val<p->val) return lowestCommonAncestor(root->right,p,q);
}
int main()
{return 0;
}
剑指 Offer 68 - II. 二叉树的最近公共祖先
题意:
剑指 Offer 68 - II. 二叉树的最近公共祖先
给一颗二叉树,和在树中的两个值,求他们的最近公共祖先
解:
不是二叉搜索树,不能直接判断数字是否在左右两边,所以改成dfs获取是否在子树,
然后同样两种情况,1.如果一个节点是p或q,它的子树有一支为真(含p或q)则返回该节点
2.若递归途中有一个节点左右两支均为真,则返回该节点
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* ans=nullptr;
bool dfs(TreeNode* root,const TreeNode*const p,const TreeNode*const q)
{if(ans!=nullptr) return false;//已经有答案了 bool ret1=false,ret2=false;if(root->left!=nullptr) ret1|=dfs(root->left,p,q);//左支 if(root->right!=nullptr) ret2|=dfs(root->right,p,q);//右支 if(root==p||root==q)//pq+子树pq {if(ret1||ret2) ans=root;else return true;}if(ret1&&ret2) ans=root;//子树p+子树q //cout<<root->val<<" "<<ret1<<" "<<ret2<<endl;return ret1||ret2;//合并分支信息 }
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
{bool temp=dfs(root,p,q);return ans;
}
int main()
{return 0;
}
剑指 Offer 37. 序列化二叉树
题意:
剑指 Offer 37. 序列化二叉树
二叉树变字符串,字符串再变回二叉树
解:
hard题,就是步骤和debug麻烦,写了一坨屎 200ms+ 30mb- 能用就行
代码:
#include<iostream>
using namespace std;
struct TreeNode
{int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
string int2string(int x)
{string ret;if(x==0) return "0";while(x){ret=char('0'+x%10)+ret;x/=10;}return ret;
}
int string2int(string s)
{int ret=0;for(auto &ch:s){ret=ret*10+int(ch-'0');}return ret;
}
void node2string(string& s,TreeNode* root)
{s.append(int2string(root->val));if(root->left!=nullptr){s.append(",");node2string(s,root->left);}else s.append(",N");if(root->right!=nullptr){s.append(",");node2string(s,root->right);}else s.append(",N");
}
string serialize(TreeNode* root)
{string tree;if(root==nullptr) return tree;node2string(tree,root);//cout<<"tree:"<<tree<<endl; return tree;
}
void string2node(TreeNode* root,string& data)
{string s;int r=0;while(r<data.size() && data[r]!=',') r++;s=data.substr(0,r);data.erase(0,min(r+1,int(data.size())));if(s=="N") root->left=nullptr;else{root->left=new TreeNode(string2int(s));string2node(root->left,data);}r=0;while(r<data.size() && data[r]!=',') r++;s=data.substr(0,r);data.erase(0,min(r+1,int(data.size())));if(s=="N") root->right=nullptr;else{root->right=new TreeNode(string2int(s));string2node(root->right,data);}
}
TreeNode* deserialize(string data)
{TreeNode* newHead=nullptr;if(data.empty()) return newHead;string s;int r=0;while(r<data.size() && data[r]!=',') r++;s=data.substr(0,r);data.erase(0,min(r+1,int(data.size())));newHead=new TreeNode(string2int(s));string2node(newHead,data);return newHead;
}
int main()
{return 0;
}
剑指 Offer 38. 字符串的排列-11
题意:
剑指 Offer 38. 字符串的排列
输出字符串的全排序(去重)
解:
全排列板子题+set去重
代码:
#include<bits/stdc++.h>
using namespace std;
void qp(int l,string temp,vector<bool>& book,set<string>& ss,const string& s)
{if(l==s.size()){//cout<<"insert:"<<temp<<endl;ss.insert(temp);}for(int i=0;i<s.size();i++){if(book[i]==0){book[i]=1;qp(l+1,temp+s[i],book,ss,s);book[i]=0;}}
}
vector<string> permutation(string s)
{int l=0;int lg=s.length();vector<string>ans;set<string>ss;vector<bool>book(lg);qp(l,"",book,ss,s);for(auto &tempss:ss) ans.push_back(tempss);return ans;
}
int main()
{string s;cin>>s;vector<string>ans=permutation(s);for(auto &a:ans) cout<<a<<endl;return 0;
}
相关文章:
剑指Offer-搜索与回溯算法
文章目录 剑指 Offer 32 - I. 从上到下打印二叉树题意:解:代码: 剑指 Offer 32 - II. 从上到下打印二叉树 II题意:解:代码: 剑指 Offer 32 - III. 从上到下打印二叉树 III题意:解:代…...

【云原生】Docker 详解(三):Docker 镜像管理基础
Docker 详解(三):Docker 镜像管理基础 1.镜像的概念 镜像可以理解为应用程序的集装箱,而 Docker 用来装卸集装箱。 Docker 镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动容器。 Dock…...

SD-MTSP:蜘蛛蜂优化算法SWO求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)
一、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快,求解精度高的优势。蜘蛛蜂优化算…...
【ARM 嵌入式 编译系列 3.1 -- GCC __attribute__((used)) 使用】
文章目录 __attribute__((used)) 属性介绍代码演示编译与输出GCC 编译选项 上篇文章:ARM 嵌入式 编译系列 3 – GCC attribute((weak)) 弱符号使用 下篇文章:ARM 嵌入式 编译系列 3.2 – glibc 学习 __attribute__((used)) 属性介绍 在普通的 C/C 程序中…...

C++ ModBUS TCP客户端工具 qModMaster 介绍及使用
qModMaster工具介绍 QModMaster是一个基于Qt的Modbus主站(Master)模拟器,用于模拟和测试Modbus TCP和RTU通信。它提供了一个直观的图形界面,使用户能够轻松设置和发送Modbus请求,并查看和分析响应数据。 以下是QModM…...

笔记本电脑如何把sd卡数据恢复
在使用笔记本电脑过程中,如果不小心将SD卡里面的重要数据弄丢怎么办呢?别着急,本文将向您介绍SD卡数据丢失常见原因和恢复方法。 ▌一、SD卡数据丢失常见原因 - 意外删除:误操作或不小心将文件或文件夹删除。 - 误格式化&#…...

【2023 华数杯全国大学生数学建模竞赛】 B题 不透明制品最优配色方案设计 39页论文及python代码
【2023 华数杯全国大学生数学建模竞赛】 B题 不透明制品最优配色方案设计 39页论文及python代码 1 题目 B 题 不透明制品最优配色方案设计 日常生活中五彩缤纷的不透明有色制品是由着色剂染色而成。因此,不透明制品的配色对其外观美观度和市场竞争力起着重要作用。…...

Exams/ece241 2013 q4
蓄水池问题 S3 S2 S1 例如:000 代表 无水 ,需要使FR3, FR2, FR1 都打开(111) S3 S2 S1 FR3 FR2 FR1 000 111 001 011 011 001 111 000 fr代表水变深为…...

Android OkHttp源码分析--分发器
OkHttp是当下Android使用最频繁的网络请求框架,由Square公司开源。Google在Android4.4以后开始将源码中 的HttpURLConnection底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的。 OKHttp优点: 1、支持Http1、Http2、Quic以及Web…...

大数据面试题:说下Spark中的Transform和Action,为什么Spark要把操作分为Transform和Action?
面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答:Spark常见的算子介绍一下 参考答案: 我们先来看下Spark算子的作用: 下图描述了Spark在运行转换中通过算…...

【图像去噪的扩散滤波】基于线性扩散滤波、边缘增强线性和非线性各向异性滤波的图像去噪研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
python函数、运算符等简单介绍2(无顺序)
list(列表) 列表是Python的一种内置数据类型,列表是可以装各种数据类 型的容器 # 第一种list创建方式 list_name [晓东,小刚,明明,小红,123,123.4,123] print(list_name) print(type(list_name)) # 输出结果: [晓东, 小刚, 明明…...
k8s 自身原理 3
前面有分享到 master 主节点上的 四个组件,etcd,ApiServer,scheduler,controller manager 接下来我们分享一波 woker 节点上的组件,xdm 还记得 worker 节点上都有什么吗? kubeletkube-proxy实际的服务对应…...

SpringBoot 3自带的 HTTP 客户端工具
原理 Spring的HTTP 服务接口是一个带有HttpExchange方法的 Java 接口,它支持的支持的注解类型有: HttpExchange:是用于指定 HTTP 端点的通用注释。在接口级别使用时,它适用于所有方法。GetExchange:为 HTTP GET请求指…...

Spring Boot多级缓存实现方案
1.背景 缓存,就是让数据更接近使用者,让访问速度加快,从而提升系统性能。工作机制大概是先从缓存中加载数据,如果没有,再从慢速设备(eg:数据库)中加载数据并同步到缓存中。 所谓多级缓存,是指在整个系统架…...

机器学习笔记:李宏毅chatgpt 大模型 大资料
1 大模型 1.1 大模型的顿悟时刻 Emergent Abilities of Large Language Models,Transactions on Machine Learning Research 2022 模型的效果不是随着模型参数量变多而慢慢变好,而是在某一个瞬间,模型“顿悟”了 这边举的一个例子是&#…...

2023年中国智慧公安行业发展现况及发展趋势分析:数据化建设的覆盖范围不断扩大[图]
智慧公安基于互联网、物联网、云计算、智能引擎、视频技术、数据挖掘、知识管理为技术支撑,公安信息化为核心,通过互联互通、物联化、智能方式促进公安系统各功能模块的高度集成、协同作战实现警务信息化“强度整合、高度共享、深度应用”警察发展的新概…...
Apache Dubbo概述
一、课程目标 1. 【了解】软件架构的演进过程 2. 【理解】什么是RPC 3. 【掌握】Dubbo架构 4. 【理解】注册中心Zookeeper 5. 【掌握】Zookeeper的安装和使用 6. 【掌握】Dubbo入门程序 7. 【掌握】Dubbo管理控制台的安装和使用 8. 【理解】Dubbo配置二、分布式RPC框架Apache …...

React UI组件库
1 流行的开源React UI组件库 1 material-ui(国外) 官网: Material UI: React components based on Material Design github: GitHub - mui/material-ui: MUI Core: Ready-to-use foundational React components, free forever. It includes Material UI, which implements Go…...

计算机科学的伟大变革:从机械计算到人工智能
摘要 计算机科学作为一门学科,经历了几十年的发展和演变。本论文旨在探讨计算机科学领域的伟大变革,从最早的机械计算设备到如今的人工智能系统。通过回顾历史、分析技术进步以及展望未来,我们可以清晰地看到计算机科学如何塑造了现代社会&a…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...