Leetcode Top 100 Liked Questions(序号236~347)
236. Lowest Common Ancestor of a Binary Tree
题意:二叉树,求最近公共祖先,All Node.val
are unique.
我的思路
首先把每个节点的深度得到,之后不停向上,直到val相同,存深度就用map存吧
但是它没有向上的指针,要如何解决?——用map<int,int>存一下父节点?
返回的是指针,注意一下
代码 Runtime28 ms Beats 5.86% Memory17.7 MB Beats 5.56%
class Solution {
public:unordered_map<int,int>dep; unordered_map<TreeNode*,TreeNode*>fa;void dfs(TreeNode* root,int dp){if(root==NULL)return;dep[root->val]=dp;if(root->left)fa[root->left]=root;if(root->right)fa[root->right]=root;dfs(root->left,dp+1); dfs(root->right,dp+1);}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {dfs(root,0);while(dep[p->val]!=dep[q->val]){if(dep[p->val]>dep[q->val]) p=fa[p];else q=fa[q];}while(p!=q){p=fa[p];q=fa[q];}return p;}
};
标答 递归
情况1:如果p==root||q==root,那就返回root;这里的root是正解
情况2:是指同一层级但不同的指针,而root就是它们的祖先
情况3:p和q都在lca1这里,lca2为NULL不返回
情况4:和情况3类似
代码 Runtime13 ms Beats 73.18% Memory14.2 MB Beats 49.26%
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(!root)return root;if(root->val == p->val || root->val == q->val)return root;//情况1TreeNode* lca1=lowestCommonAncestor(root->left,p,q);TreeNode* lca2=lowestCommonAncestor(root->right,p,q);if(lca1!=NULL&&lca2!=NULL)return root;//情况2if(lca1!=NULL)return lca1;//情况3return lca2;//情况4}
};
标答 另一种的不用遍历
用stack来辅助建立每个指针的父指针,这样就不用把整棵树都建完;根据下面的代码来说不能用queue,因为用栈代表的是DFS,而queue就是层序遍历,这样循环终止判断条件mp.find(p)==mp.end() || mp.find(q)==mp.end()就是错误的了
之后用set来每个指针向上,这样就不需要dep了
代码 Runtime24 ms Beats 11.11% Memory17.3 MB Beats 7.82%
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {stack<TreeNode*> s; unordered_map<TreeNode*,TreeNode*> mp;mp[root]=NULL; s.push(root);while(mp.find(p)==mp.end() || mp.find(q)==mp.end()){TreeNode *t=s.top(); s.pop();if(t->left){mp[t->left]=t; s.push(t->left);}if(t->right){mp[t->right]=t; s.push(t->right);}}set<TreeNode*> sett;while(p!=NULL){sett.insert(p); p=mp[p];}while(sett.find(q)==sett.end()){q=mp[q];}return q;}
};
238. Product of Array Except Self
题意:给一个数组a,返回一个数组ans,ans[i]等于除了a[i],其他数的值
我的思路
先判断有多少个0,两个的话都输出0;1个的话,其余的是0,其中一个是除它以外的积;
没有0,那就总积/当前的数
写完了才发现不让用除法
代码 Runtime 11 ms Beats 98.32% Memory24 MB Beats 79.45%
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int zero=0;int mul=1;for(int i=0;i<nums.size();i++){if(!nums[i])zero++;else mul=mul*nums[i];}vector<int> ans(nums.size(),0);if(zero>1)return ans;for(int i=0;i<nums.size();i++){if(zero&&!nums[i])ans[i]=mul;else if(!zero)ans[i]=mul/nums[i];}return ans;}
};
标答 前缀积与后缀积
就是普通的做,最后把空间优化了
代码 Runtime14 ms Beats 93.5% Memory24 MB Beats 79.45%
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> output(n);output[0] = 1;for(int i=1; i<n; i++){output[i] = output[i-1] * nums[i-1];}int right = 1;for(int i=n-1; i>=0; i--){output[i] *= right;right *= nums[i];}return output;}
};
239. Sliding Window Maximum
题意:滑动窗口求最大
我的思路
我记得是用队列做的,因为要求最大值,但是忘了,只记得队列里放的是序号
用单调栈能做吗?不能,例如7 6 5 4 3 2 1
只放比队尾大的数 7 6 5 4 3 2 1 不行
后面想了想,只放比队尾小的数 7 6 5 4 3 2 1好像可以,毕竟是求最大值
标答 优先队列 O(nlogn)
初始化pair型的优先队列,答案ans;把k个{数字,序号}放入队列,ans[0]是优先队列的最大的
遍历nums数组,如果优先队列不为空,并且顶部的数字已经小于等于i-k了,那就把顶部的数字不断弹出,之后放入pair,更新答案
代码 Runtime231 ms Beats 48.99% Memory148.9 MB Beats 26.27%
class Solution {
public:#define pii pair<int,int> vector<int> maxSlidingWindow(vector<int>& nums, int k) {priority_queue<pii,vector<pii>,less<pii>> q;int n=nums.size();vector<int> ans;for(int i=0;i<k;i++) q.push({nums[i],i});ans.push_back(q.top().first);for(int i=k;i<n;i++){while(!q.empty()&&q.top().second<=i-k)q.pop(); //注意上面的等号,queue只能有(i-k,i]之间的数q.push({nums[i],i});ans.push_back(q.top().first);}return ans;}
};
标答 双端队列
初始化双端队列dq和答案数组ans,在k个数以内如果之后的数比队尾大,那么把队尾的数弹出,之后加入(像单调栈一样,队列里的值是从大到小)ans[0]是队首的值,遍历剩下的数组,如果队首的序号超过范围里,把它弹出,如果新来的数比队尾大,那么把队尾的数弹出,最后更新答案
代码 Runtime190 ms Beats 90.70% Memory134.7 MB Beats 72.95%
class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {deque<int> q;vector<int>ans;//q里面放序号int n=nums.size();for(int i=0;i<k;i++){while(!q.empty()&&nums[q.back()]<=nums[i])q.pop_back();q.push_back(i);}ans.push_back(nums[q.front()]);for(int i=k;i<n;i++){if(q.front()<=i-k)q.pop_front();while(!q.empty()&&nums[q.back()]<=nums[i])q.pop_back();q.push_back(i);ans.push_back(nums[q.front()]);}return ans;}
};
标答 左指针
初始化max_idx数组(模拟双端队列),ans数组,left指针,
注意 如果直接vector<int> ans(n-k+1);来初始化ans,可以减少内存的使用
代码 Runtime 173 ms Beats 98.6 Memory 129.7 MB Beats 99.17%
class Solution {
public:int n;vector<int> max_idx;//array storing index for maxint left=0;vector<int> maxSlidingWindow(vector<int>& nums, int k) {n=nums.size(); vector<int> ans(n-k+1);for(int i=0;i<k;i++){while(max_idx.size()>left && nums[i]>=nums[max_idx.back()]) max_idx.pop_back();// pop back the indexes for smaller onesmax_idx.push_back(i); // push back the index for larger one}ans[0]=nums[max_idx[left]]; for(int i=k; i<n; i++){while(max_idx.size()>left && nums[i]>=nums[max_idx.back()]) max_idx.pop_back();// pop back the indexes for smaller onesmax_idx.push_back(i); // push back the index for larger oneif (max_idx[left]==i-k) left++; ans[i-k+1]=nums[max_idx[left]]; }return ans;}
};
240. Search a 2D Matrix II
题意:给一个行和列都升序的矩阵,找target是否在矩阵中
我的思路
和之前不一样的是最左边一列不是索引,所以要nlogm
代码 Runtime 184 ms Beats 21.13% Memory 14.8 MB Beats 88.10%
class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int n=matrix.size();int q=0;int m=matrix[0].size();for(int q=0;q<n;q++){int l=0,r=m-1;while(l<=r){int mid=(l+r)/2;if(matrix[q][mid]<target) l=mid+1;else if(matrix[q][mid]==target) return 1;else r=mid-1;}}return 0;}
};
标答
因为行从小到大排列,列也是从小到大排列,所以可以从左上角或者右上角开始找,假设从左下角开始找,找小的行--,找大的列++,O(n+m)
代码 Runtime88 ms Beats 72.75% Memory14.9 MB Beats 47.68%
class Solution {
public:bool searchMatrix(vector<vector<int>>& ma, int tar) {int m=ma[0].size(),n=ma.size();int row=n-1,col=0;while(row>=0&&col<m){if(ma[row][col]>tar)row--;else if(ma[row][col]<tar)col++;else return 1;}return 0;}
};
神奇的优化 在最后加上ma.clear()会使时间大幅度减少
试了试第215题,第131题是可行的,但第72题,第53题就不行
补充知识:STL中的隐性性能开销与副作用
代码 Runtime21 ms Beats 99.80% Memory14.9 MB Beats 47.68%
class Solution {
public:bool searchMatrix(vector<vector<int>>& ma, int tar) {int m=ma[0].size(),n=ma.size();int row=n-1,col=0;while(row>=0&&col<m){if(ma[row][col]==tar){ma.clear();return 1;}if(ma[row][col]>tar)row--;else col++;}ma.clear();return 0;}
};
283. Move Zeroes
题意:把0都放在最后
我的思路
想过荷兰国旗算法,但是这样就把非0的顺序打乱了,所以不会做
标答
就是简单的思维题
代码 Runtime12 ms Beats 94.45% Memory19.2 MB Beats 34.86%
class Solution {
public:void moveZeroes(vector<int>& nums) {int j=0;for(int i=0;i<nums.size();i++){if(nums[i])nums[j++]=nums[i];}for(;j<nums.size();j++)nums[j]=0;return ;}
};
287. Find the Duplicate Number
题意:一个数组,有一个数出现了多次,返回这个数
我的思路
开一个vis看有无重复;用上了取消同步和clear
代码 Runtime37 ms Beats 100% Memory61 MB Beats 98.76%
class Solution {
public:int findDuplicate(vector<int>& nums) {bool vis[100005]={0};ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);for(int i=0;i<nums.size();i++){if(vis[nums[i]]){nums.clear();return nums[i];}vis[nums[i]]=1;}return -1;}
};
标答 快慢指针
定义快指针和慢指针,就是看环的接口处以及之前值相同的地方
以1 3 3 4 2 为例
第一轮 fast=3(1) slow=1
第二轮 fast=2 slow=3
第三轮 fast=4 slow=4
fast=0
fast=1,slow=2
fast=3(1),slow=3(2)
例子
3 1 3 4 2
第一轮 fast=4 slow=3(1)
第二轮 fast=3(2),slow=4
第三轮 fast=2,slow=2
fast=0
fast=3(1) slow=3(2)
代码 Runtime39 ms Beats 99.99% Memory 61 MB Beats 99.82%
class Solution {
public:int findDuplicate(vector<int>& nums) {ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(0);int fast = 0; int slow = 0;while (true){fast = nums[nums[fast]];slow = nums[slow];if(slow == fast){break;}}fast = 0;while(true){fast = nums[fast];slow = nums[slow];if(fast == slow){nums.clear();return slow;}}}
};
其他有趣的解法:LeetCode - The World's Leading Online Programming Learning Platform
改变数值不增加空间的:因为1 <= nums[i] <= n,nums.length == n + 1,所以数组中最大的数小于nums.size(),遍历数字,每遍历一个数nums[i],就把nums[nums[i]]变成负的,这样如果遍历到nums[nums[i]]是负的,就返回nums[i]
二分查找、位运算……
295. Find Median from Data Stream
题意:返回中位数
我的思路
对顶堆
代码 Runtime276 ms Beats 74.61% Memory116.8 MB Beats 96.59%
class MedianFinder {
public:priority_queue<int,vector<int>,greater<int> >qs;//小的在最上面priority_queue<int,vector<int>,less<int> >qb;//大的在最上面MedianFinder() {}void addNum(int num) {if(qs.empty()&&qb.empty())qs.push(num);else if(qs.top()<num) qs.push(num);else qb.push(num);while(qs.size()-1>qb.size()){//4 3 or 3 3 or 3 4都可以int tmp=qs.top();qs.pop();qb.push(tmp);}while(qs.size()+1<qb.size()){int tmp=qb.top();qb.pop();qs.push(tmp);}}double findMedian() {int sn=qs.size(),bn=qb.size();if(sn<bn)return qb.top();else if(sn>bn)return qs.top();else return 1.0*(qs.top()+qb.top())/2;}
};
标答 优化
上面的对顶堆写的有可以改进的地方
1. 维持qs比qb多一个的情况,不用循环【第一次进入的是qs,所以qs比qb多一个】
2. 有了上面的限定,奇数就只要返回qs的顶部就可以了
3. 不用创造变量tmp,直接qb.push(qs.top())放进去就可以了(不知道能否减少时间,但确实少了
以上3个方法在一起 Runtime 253 ms Beats 95.75%
4. 耍赖方法,ios::sync_with_stdio(0) Runtime 230 ms Beats 99.83% Memory 116.9 MB
代码 Runtime 253 ms Beats 95.75% Memory117 MB Beats 33.29%
class MedianFinder {
public:priority_queue<int,vector<int>,greater<int> >qs;//小的在最上面priority_queue<int,vector<int>,less<int> >qb;//大的在最上面MedianFinder() {}void addNum(int num) {if(qs.empty()||qs.top()<num)qs.push(num);else qb.push(num);if(qs.size()-1>qb.size()){//5 3 noqb.push(qs.top());qs.pop();}else if(qs.size()<qb.size()){//3 4-->4 3qs.push(qb.top());qb.pop();}}double findMedian() {int sn=qs.size(),bn=qb.size();if(sn!=bn)return qs.top();else return 1.0*(qs.top()+qb.top())/2;}
};
300. Longest Increasing Subsequence
题意:严格上升序列的长度
我的思路
动态规划,我记得还有用队列优化,二进制优化(?)和普通dp版本
但我都忘记了
例子一
num[i] 1 10 100 1000 10000 2 3 4 5 6 7 8
dp[i] 1 2 3 4 5 2 3 4 5 6 7 8
v[i] 0 0 1 2 3 0 5 6 7 8 9 10
例子二
num[i] 5 6 7 2 1 7 8 9 4
dp[i] 1 2 3 1 1 3 4 5 2
v[i] # 0 1 # # 1 2 6 3
v[i]要找dp最大的且比自己小的
开一个空间表示比自己小的位置在哪里v[i],dp[i]=dp[v[i]]+1 最后遍历一遍,找个最大的 On^2 ?
---->(详见标答动态规划)
单调栈如何?单调栈5 6 7 2 部分,2会把所有数字都弹出的,不行
双端队列如何?如果比对头小,把对头弹出,加入;如果比队尾大,加入;例子一不行
vector如何?直接二分+插入,二分就用lower_bound
1 10 100 1000 10000
1 2 100 1000 10000
1 2 3 1000 10000
1 2 3 4 10000
1 2 3 4 5
1 2 3 4 5 6……可以
代码 二分 Runtime7 ms Beats 90.93% Memory10.3 MB Beats 87.20%
class Solution {
public:int lengthOfLIS(vector<int>& nums) {vector<int> v;for(int i=0;i<nums.size();i++){int tmp=lower_bound(v.begin(),v.end(), nums[i])-v.begin();if(tmp==v.size())v.push_back(nums[i]);else v[tmp]=nums[i];}return v.size();}
};
标答 动态规划
初始化dp[0]为1;在[0, i]的序列中,从右向左看,如果nums[j]<nums[i]且dp[j]>dp[i],dp[i]=dp[j];这一步就是上面思路中的v的代替品;最后循环结束,到dp[i]的时候++;
代码 Runtime 171 ms Beats 75.72% Memory10.3 MB Beats 97.68%
class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n=nums.size();int dp[2505]={0};int ans=1;dp[0]=1;for(int i=1;i<n;i++){for(int j=i-1;j>=0;j--){//从i-1开始if(nums[j]<nums[i]&&dp[j]>dp[i])dp[i]=dp[j];}dp[i]++;ans=max(ans,dp[i]);}return ans;}
};
标答 树状数组
前置知识——树状数组是什么
——来源:算法学习笔记(2) : 树状数组
树状数组思路
dp的第二层循环的目的是找小于等于num[i]的数字中dp[j]>dp[i]的
所以建立树状数组c[i],其中i是num[i],c[i]是dp[i],从1开始
首先建树int c[maxn],c[1]=1,如果query(i-1)>dp[i],dp[i]=query(i-1);dp[i]++,add(i, dp[i])
或者不要dp数组了,因为dp[i]刚刚遍历到为0,一定query(i-1)>dp[i];之后的操作也没有dp[i-1],所以可以省略
写完了发现nums[i]居然有负数,记得加上偏移量
代码 Runtime 4 ms Beats 95.80% Memory 10.3 MB Beats 87.20%
class Solution {
public:#define lowbit(x) x&(-x)int c[20004]={0};//c[1]不需要初始化为1int query(int a){//找[1,a]中最大的数int maxx=0;for(int i=a;i>0;i-=lowbit(i))maxx=max(maxx,c[i]);return maxx;}void add(int a,int k){for(int i=a;i<20004;i+=lowbit(i))c[i]=max(c[i],k);}int lengthOfLIS(vector<int>& nums) {int n=nums.size();int ans=0;for(int i=0;i<n;i++){int ma=query(nums[i]-1+10001);//注意这里是nums[i]-1,比nums[i]小才可以add(nums[i]+10001,ma+1);ans=max(ans,ma+1);}return ans;//因为你不知道数组nums中最大的数m是多少(除非你遍历一遍)//所以你不能return query(m)//所以一边遍历一边更新答案}
};
322. Coin Change
题意:给你硬币类型和目标,求最少的硬币数
我的思路
不知道贪心行不行,所以就用动态规划了
1. 初始化为负无穷来判断安排是否合法
2. 求最小的时候要多一步条件判断
代码 Runtime 59 ms Beats 87.21% Memory9.9 MB Beats 98.52%
class Solution {
public:int coinChange(vector<int>& coins, int amount) {int dp[10004];memset(dp,-0x3f,sizeof(dp)); dp[0]=0;int m=coins.size();for(int i=0;i<=amount;i++){for(int j=0;j<m;j++){if(i>=coins[j]&&dp[i-coins[j]]>=0){if(dp[i]<0)dp[i]=dp[i-coins[j]]+1;else dp[i]=min(dp[i],dp[i-coins[j]]+1);}}}if(dp[amount]<0)return -1;return dp[amount];}
};
标答 递归+贪心+记忆化 但是没懂
最前面的条件判断:如果amount是双数,但是coin里面没有双数就返回-1;硬币从小到大排序;
接下来看注解,总之是很精密的代码
就是有一个地方不懂,如果没有一开始的if判断,它会超时
那有无可能 存在一个不被最开始的if检测到的-1情况会使这个代码超时?
代码 Runtime3 ms Beats 99.98% Memory9.9 MB Beats 99.78%
class Solution{
bool check(vector<int>& coins, short index, int cnt, int target){long sum = (long) coins[index]*cnt;//相乘可能超出int的范围if (sum==target) return true;//如果数量刚好,就是可以用cnt个硬币else if (sum > target) {//如果sum超过了,就要换个计划if (index == 0) return false;//没有剩下的硬币类型了,不可能了for (short i = cnt; i>0; i--){//预计给之后的硬币类型 i个来搞定,自己留下cnt-i个long take = target - (long)coins[index]*(cnt-i);//take是预计之后的硬币类型要达成的数量//为什么cnt-i会==0,因为可能不用这个硬币if (take < 0) break;//为什么自己留下的cnt-i要从小到大遍历?因为cnt-i大了,take小于0,更大的cnt-i就更不用看了int r = take;//隐性的类型转换也要时间,所以这里多一步if (check(coins, index-1, i, r)) return true; }}return false;}
public:int coinChange(vector<int>& coins, int amt) {if (amt&1){//如果是双数short i=0;for (;i<coins.size();i++){if(coins[i]&1)break;}if (i==coins.size()) return -1; }sort(coins.begin(), coins.end());int best = amt/coins.back();//个数最少的int worst = amt/coins.front();//个数最多的for(short i=best; i<=worst;i++)//预计i个硬币if (check(coins, coins.size()-1, i, amt)) return i;return -1;}
};
347. Top K Frequent Elements
题意:返回k个出现次数最多的数
我的思路
哈希,nlogn
map默认是按key值从小到大排序的,不能更改sort方式,所以用vector<pii>的方式了
遇到的问题:错误解决方法:error: reference to non-static member function must be called
要在cmp函数前面加上static
代码 Runtime 8 ms Beats 93.30% Memory13.7 MB Beats 59.82%
class Solution {
public:# define pii pair<int,int> static bool cmp(pii &a,pii &b){return a.first>b.first;}vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int,int>mp;vector<pii> cnt; vector<int> ans;int n=nums.size();for(int i=0;i<n;i++)mp[nums[i]]++;for(auto&q:mp) cnt.push_back({q.second,q.first});sort(cnt.begin(),cnt.end(),cmp);for(int i=0;i<k;i++)ans.push_back(cnt[i].second);return ans;}
};
标答是map+优先队列,我觉得差不多
相关文章:
Leetcode Top 100 Liked Questions(序号236~347)
236. Lowest Common Ancestor of a Binary Tree 题意:二叉树,求最近公共祖先,All Node.val are unique. 我的思路 首先把每个节点的深度得到,之后不停向上,直到val相同,存深度就用map存吧 但是它没有向…...
MySQL数据库学习【基础篇】
📃基础篇 下方链接使用科学上网速度可能会更加快一点哦! 请点击查看数据库MySQL笔记大全 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的…...
Kubernetes技术--k8s核心技术Service服务
1.service概述 Service 是 Kubernetes 最核心概念,通过创建 Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。 2.service存在的意义 -1:防止pod失联(服务发现) 我们先说一下什么叫pod失联。 -2:...
OpenHarmony 应用 ArkUI 状态管理开发范例
本文转载自《#2023 盲盒码 # OpenHarmony 应用 ArkUI 状态管理开发范例》,作者:zhushangyuan_ 本文根据橘子购物应用,实现 ArkUI 中的状态管理。 在声明式 UI 编程框架中,UI 是程序状态的运行结果,用户构建了一个 UI …...
二、QTableWidget 类 clear() 和 clearContents() 的区别及程序崩溃原因分析
问题描述:区分 QTableWidget 类的 clear() 和 clearContents() 的用法,以及可能由于这两个方法使用不当导致程序崩溃的原因分析 Qt 官方文档对 QTableWidget 类的 clear() 方法描述如下: [slot] void QTableWidget::clear() Removes all ite…...
spring boot 项目中搭建 ElasticSearch 中间件 一 postman 操作 es
postman 操作 es 1. 简介2. 环境3. postman操作索引3.1 创建索引3.2 查看索引3.3 查看所有索引3.4 删除索引 4. postman操作文档4.1 添加文档4.2 查询文档4.3 查询全部文档4.4 更新文档4.5 局部更新文档4.6 删除文档4.7 条件查询文档14.8 条件查询文档24.9 条件查询文档 limit4…...
设计模式—观察者模式(Observer)
目录 思维导图 一、什么是观察者模式? 二、有什么优点吗? 三、有什么缺点吗? 四、什么时候使用观察者模式? 五、代码展示 ①、双向耦合的代码 ②、解耦实践一 ③、解耦实践二 ④、观察者模式 六、这个模式涉及到了哪些…...
分类算法系列③:模型选择与调优 (Facebook签到位置预测)
目录 模型选择与调优 1、介绍 模型选择(Model Selection): 调优(Hyperparameter Tuning): 本章重点 2、交叉验证 介绍 为什么需要交叉验证 数据处理 3、⭐超参数搜索-网格搜索(Grid Search) 介绍…...
PCL RANSAC分割提取多个空间圆
目录 一、概述二、代码实现三、结果展示1、原始数据2、提取结果四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 使用PCL分割提取多个空间圆,其核心原理仍然是RANSAC拟合空间圆,这里只是做简单修改…...
Java八股文学习笔记day01
01.和equals区别 对于字符串变量来说,使用""和"equals"比较字符串时,其比较方法不同。""比较两个变量本身的值,即两个对象在内存中的首地址,"equals"比较字符串包含内容是否相同。 对于非…...
vant的NavBar导航栏可以自定义背景图片吗
可以的,Vant的NavBar导航栏提供了一个background-image属性,可以设置自定义背景图片。例 如: <van-nav-bar title"标题" left-text"返回" left-arrow background-image"url(https://example.com/image.jpg)&qu…...
深入浅出AXI协议(5)——数据读写结构读写响应结构
目录 一、前言 二、写选通(Write strobes) 三、窄传输(Narrow transfers) 1、示例1 2、示例2 四、字节不变性(Byte invariance) 五、未对齐的传输(Unaligned transfers) 六…...
IntelliJ Idea开发Vue遇到的几个问题
IntelliJ Idea开发Vue遇到的几个问题 确保 idea已安装插件【Vue.js】 问题1:ts方法错误 或 提示导入 import xxx.vue标红 解决办法:在 env.d.ts中添加以下代码(若无此文件,重新创建): /* eslint-disable */ declare module *.…...
sql查找最晚一天/日期最大的一条记录 两种方法
例:查找最晚入职员工的所有信息 建表: CREATE TABLE employees ( emp_no int(11) NOT NULL, birth_date date NOT NULL, first_name varchar(14) NOT NULL, last_name varchar(16) NOT NULL, gender char(1) NOT NULL, hire_date date NOT NULL, PRIMA…...
详解python的
详解& 在Python中,使用&符号可以求取两种数据类型的交集: 集合(Set):你可以使用&来计算两个集合的交集。例如: set1 {1, 2, 3, 4} set2 {3, 4, 5, 6} common_elements set1 & set2 pri…...
Modbus TCP通信笔记
目录 1 Modbus TCP 数据协议1.1 数据格式1.2 报文头(MBAP头)1.3 功能码1.4 Modbus 地址映射到 CPU 地址 2 Modbus TCP 通讯数据示例2.1 功能码01 读离散输出线圈2.2 功能码02 读离散输入线圈2.3 功能码03 读保持寄存器2.4 功能码04 读输入寄存器2.5 功能码05 写单个离散输出寄存…...
CIM和websockt-实现实时消息通信:双人聊天和消息列表展示
欢迎大佬的来访,给大佬奉茶 一、文章背景 有一个业务需求是:实现一个聊天室,我和对方可以聊天;以及有一个消息列表展示我和对方(多个人)的聊天信息和及时接收到对方发来的消息并展示在列表上。 项目框架概…...
useLayoutEffect和useEffect有什么作用?
useEffect 和 useLayoutEffect 都是 React 中的钩子函数,用于在组件渲染过程中执行副作用操作。它们的主要区别在于执行时机。 useEffect: useEffect 是异步执行的,它在浏览器渲染完成之后才执行。这意味着它不会阻塞浏览器的渲染过程,因此适合用于处理副作用,如数据获取、…...
django中配置使用websocket终极解决方案
django ASGI/Channels 启动和 ASGI/daphne的区别 Django ASGI/Channels 是 Django 框架的一个扩展,它提供了异步服务器网关接口(ASGI)协议的支持,以便处理实时应用程序的并发连接。ASGI 是一个用于构建异步 Web 服务器和应用程序…...
敦煌网、Jumia等跨境电商平台怎么测评(补单)留评?
评论的重要性是众所周知的,对于想要做卖家运营的人来说,它直接影响着产品的销量和排名 那么如何通过自养号测评来提升销量和排名呢? 我相信大家对这个问题已经有了一定的了解,拥有大量自养号可以通过这些号来通过关键词搜索、浏…...
uni-app之android离线打包
一 AndroidStudio创建项目 1.1,上一节演示了uni-app云打包,下面演示怎样androidStudio离线打包。在AndroidStudio里面新建空项目 1.2,下载uni-app离线SDK,离线SDK主要用于App本地离线打包及扩展原生能力,SDK下载链接h…...
【传输层】TCP -- 三次握手四次挥手 | 可靠性与提高性能策略
超时重传机制连接管理机制三次握手四次挥手滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议理解 listen 的第二个参数 超时重传机制 主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B࿱…...
前端将UTC时间格式转化为本地时间格式~~uniapp写法
UTC时间格式是什么 首先我们先简单的了解一下:UTC时间(协调世界时,Coordinated Universal Time)使用24小时制,以小时、分钟、秒和毫秒来表示时间 HH:mm:ss.SSSHH 表示小时,取值范围为00到23。mm 表示分钟…...
说说Kappa架构
分析&回答 对于实时数仓而言,Lmabda架构有很明显的不足,首先同时维护两套系统,资源占用率高,其次这两套系统的数据处理逻辑相同,代码重复开发。 能否有一种架构,只需要维护一套系统,就可以…...
项目介绍:《Online ChatRoom》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合
在当今数字化社会,即时通讯已成为人们生活中不可或缺的一部分。为了满足这一需求,我开发了一个名为"WeTalk"的聊天室项目,该项目基于Spring Boot、MyBatis、MySQL和WebSocket技术,为用户提供了一个实时交流的平台。在本…...
Vue3 学习 组合式API setup语法糖 响应式 指令 DIFF(一)
文章目录 前言一、Composition Api二、setup语法糖三、响应式refreactive 四、其他一些关键点v-prev-oncev-memov-cloak 五、虚拟Dom五、diff算法 前言 本文用于记录学习Vue3的过程 一、Composition Api 我觉得首先VUE3最大的改变就是对于代码书写的改变,从原来选择…...
一文轻松入门DeepSort
1.背景 Deepsort是目标检测任务的后续任务,得益于Yolo系列的大放异彩,DeepSort目标追踪任务的精度也不断提高,同时,DeepSort属于目标追踪任务中的多目标追踪,即MOT(Multiple Object Tracking,M…...
关于linux openssl的自签证书认证与nginx配置
自签文档链接 重点注意这块,不能写一样的,要是一样的话登录界面锁会报不安全 域名这块跟最后发布的一致 nginx配置的话 server {listen 443 ssl; //ssl 说明为https 默认端口为443server_name www.skyys.com; //跟openssl设置的域名保持一致s…...
Mybatis--关联关系映射
目录: 1.什么是关联关系映射: 一对一和多对多的区别 2.mybaits中的一对一&一对多关联关系配置 配置generatoeConfig文件 插件自动生成 编辑 写sql语句 创建 Ordermapper类 编写接口类 编辑 编写接口实现类 编写测试类 测试结果 一对…...
Golang基本的网络编程
Go语言基本的Web服务器实现 Go 语言中的 http 包提供了创建 http 服务或者访问 http 服务所需要的能力,不需要额外的依赖。 Go语言在Web服务器中主要使用到了 “net/http” 库函数,通过分析请求的URL来实现参数的接收。 下面介绍了http 中Web应用的基本…...
网站永久镜像怎么做/廊坊seo培训
最近DNN很受欢迎,博克圆有不少bloger对这个很有研究,并翻译了不少资料,ME也想看 看究竟,不过在看DNN之前,我决定先看看ASP.NET STARTER KIT的Portal Starter Kit,建立个简单的概念也许会对学习DNN有帮助了 我个人觉得Portal Starter Kit没有细看的必要,大概了解下面四点就可以…...
域名的注册方式/太原网站建设方案优化
http://blog.csdn.net/oscarxie/archive/2005/07/17/427531.aspx 1 VSS概述 版本控制是工作组软件开发中的重要方面,它能防止意外的文件丢失、允许反追踪到早期版本、并能对版本进行分支、合并和管理。在软件开发和您需要比较两种版本的文件或找回早期版本的文件时…...
阿里巴巴做网站的/漂亮的网页设计
有些用户为了让操作更流畅,选择简化系统,就是通过关闭一些自带功能来优化系统。但是不懂电脑的用户,建议不要自行优化系统,特别是C盘的文件,不小心误删了,很容易造成系统崩溃,适得其反。说到Win…...
做qq头像的网站/seo的作用是什么
Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。本文详细介绍了Node.js的安装和使用。 一、Node.js介绍 Node.js 不是一个 JavaScript 框架,不同于Cak…...
做游戏直播什么游戏视频网站好/百度权重怎么看
try catch finally 执行顺序 仅仅在下面4中情况下不会执行finally语句 : ①.如果在try 或catch语句中执行了System.exit(0)。 ②.在执行finally之前jvm崩溃了。 ③.try语句中执行死循环。 ④.电源断电。 1,无论try或catch,return几,fina…...
淘客怎么做网站/网络平台
1.昨天做了什么? 啄木鸟logo的设计 2.今天要做什么? 今天继续完善,并认领新任务 转载于:https://www.cnblogs.com/sunshine-z/p/8299330.html...