1.*数据结构:字典树/前缀树/Trie树-immutable;红黑树/对称二叉B树;AVL/二叉平衡查找树;二叉查找/排序/搜索树;最大/小堆-优先队列;二叉树;树;
2.*基础算法:
https://github.com/azl397985856/leetcode/blob/master/thinkings/basic-algorithm.md
3.*思路:
(1)没有排序则先排序!!!
(2)O(n) 时间复杂度& O(1) 空间复杂度||两数和:双指针(滑动窗口)
①while(l<r){operate(l,r);
if(左右移动判断)l++;else r--;}
(3)层序遍历+布满二叉树
(4)数组下标:map
(5)数组相同元素:异或为0,异或满足结合律交换律;异或非0则两个不同数必有一位bit不同,此bit位为分组条件
(6)不要求空间复杂度:map,hash,set
①map<共同特点,存放数组>:
1)比如排序后字符串一样(共同特点)
2)//map<string,vector<string>> m + vector<vector<string>> res
3)//改成map<string,int(表示res第一维下标)> m + vector<vector<string>> res
(7)二分法查找
(8)二叉搜索树:
①中序遍历->有序数组处理
②没有值相同的节点
(9)需要比较大小时,边界值最好设置long long型,即LLONG_MIN,ULLONG_MIN
①一般认为(unsigned)+(int=long int=long)=32bit;long long=long long int=64位
②INT_MIN,UINT_MIN,LONG_MIN,ULONG_MIN

4.主要思想对比
(1)总结(遇到二叉树问题):
①考虑顺序(
1)考虑前中后序遍历
2)考虑前中后序遍历+pre前驱节点
3)考虑前中后 逆序遍历(+pre),比如逆前序:根左右->右左根
4)考虑前中后 变序遍历(+pre),比如变前序:根左右->根右左
②考虑递归<
③迭代(时间空间都O(n))<
④morris(空间O(1),但不在遍历中途必须线索都解锁了才能返回,否则必须遍历到          结束才能返回)
(2)动态规划(最值+最优子结构+重叠子问题+状态转移方程+枚举+自下而上):https://labuladong.github.io/ebook/动态规划系列/动态规划详解进阶.html
①状态转移方程
1)画表格推导:1+2+3+...+99,左到右,小到大
2)维度确定:一个变量加一维,变量枚举总数就1或2可以省略一维用两个少一维数组表示节省一个循环
3)1~2个如下转移方程
s[0...i...n-1][看情况][选择与不选择:2]=max(s[][][],operate(s[][][],nums[i])))
可以是i和i-1项有关系,也可以是i和前面很多项有关系,未必差一项
4)最值+最优子结构+重叠子问题:
a.一个数组/字符串/子序列
a)dp[i]:以i为尾的...
b)dp[i][j]:SelArray[i,i+1,,,j-1,j]
i.一般与dp[i+1][j-1],dp[i][j-1],dp[i+1][j]有关
b.两个数组/字符串/子序列
a)dp[i][j]:SelArray1[0~i] SelArray2[0~j]
i.一般与dp[i-1][j-1],dp[i-1][j],dp[i][j-1]有关
c.博弈问题:dp[i][2]/dp[i][j][2] 0表示先手获得最高分,1表示后手获得最高分
②临界条件:
1)s[0],s[1]
2)s[0][0],s[0][1]
3)s[0][0][0],s[0][0][1]
4)s[0~n-1][0][0],s[0~n-1][0][1]
5)s[0][0~n-1][0],s[0][0~n-1][1]
③写完代码后的优化:二维->一个或者两个或者多个一维 一维->常数空间
④通常设 以i为结尾的满足条件的情况为 dp[i];而最终结果在最后一个dp或者所有dp中的最值
⑤动态规划 自上而下 后序递归(reversed[]记录已计算过的答案+越界判断+找到判断+子递归+处理+存reversed[]+返回)
⑥动态规划 自下而上 dp[0]初始值+循环+(满足条件下的)
⑦动态规划转移方程若出现多种情况对应不同转移方程(增减项式),可考虑dp大小+1,多个dp[0]或者dp[0][0]~dp[i][0]/d[0][i],从而统一转移方程
⑧二维遍历写法:
1)已初始化dp[i][i]:00,11,22,33,,,
//确定最终答案是dp[0][size-1]还是dp[size-1][0]还是dp[size-1][size-1]还是全部dp[i][j]中的某个最值。
确定每个数组元素是根据那些数组元素计算得到。从而确定先行还是先列,
确定行从上到下还是从下到上,
确定列从左到右还是从右到左,
只要涉及对对角线临界值则引用上个循环的循环变量
//方法一<==>方法三
for(int j=1;j<size;++j){
for(int i=j-1;i>=0;--i){
dp[i][j]:第一列到队后一列 依次 从对角线上一行到第一行
//方法二<==>方法四
for(int j=1;j<size;++j){//列
for(int i=0;i<j;++i){
dp[i][j]:第一列到队后一列 依次 从第一行到对角线上一行
//方法三
for(int i=size-2;i>=0;--i)
for(int j=i+1;j<size;++j)
dp[i][j]:对角线最后上一行到第一行 依次 从对角线右一列到最后一列
//方法四
for(int i=size-2;i>=0;--i)
for(int j=size-1;j>=i+1;--j)
dp[i][j]:对角线最后上一行到第一行 依次 从最后一列到对角线右一列
(3)递归:
从结果倒推直到问题规模变小,从右到左,99+98+...+1:动态规划相反:相反
①mainFunction+helperFunction
②mainFunction先判断if(!root)情况,如果根节点就是叶子节点时的处理情况和一般情况处理不同 则追加此判断情况的处理;helperFunction只处理if(root)的情况
③一般辅助变量需要从上层/父节点来的则设为传入参数;传入参数设为&形式速度更快,和设全局变量速度相当,不加&会超出时间限制;对应先序
1)参数不会被修改最好设成 const int &x
④需要从下层/子节点来的设为返回值;对应后序

(4)分治
(去除多余临界点,left,right,mid):平均,从中间,{1-49}+{50-99},Helper1(int left, int right);Helper2(int left, int right,int mid);
①找到中间分界点,分为 左不含分界点,右不含分界点,含分界点三部分+递归
②左右不含分界点分为 左右空+左右不空情况
③一般优化在于根据分界点分为三个部分时过滤掉无效点,缩小左右不含临界点的范围
(5)回溯+深度优先递归

②vector<vector<XXX>>函数返回类/全排列,一般用回溯,即返回结果的所有可能性的情况;一般返回结果所有可能性的情况个数等用动态规划
③分析子树的含义(最好是push和pop一次,而不是可能一次性push pop很多个对象)
④分析每个节点子树个数的限制条件(从第几个子树分支遍历到第几个分支)
⑤结束条件(先判断没找到的条件+再判断找到的条件+后面则需要递归)
⑥回溯框架:
1)全局三个数据结构:res,path,inputArray
2)trackBack三个输入参数:inputArrayIndex(遍历输入数组依据/数组越界依据),findFlag(找到/满足条件依据),visited(记忆数组)
vector<vector<int>> res;//最终结果存放
vector<int> path;//路径
vector<int> nums;//选择列表
vector<vector<bool>> covered(board.size(),vector<bool>(board[0].size(),false));
//每次思考用covered记录已遍历过的元素时,考虑是否可以在数组置某个值表示已经遍历过,例如board[i][j]=-1 or ‘#’ or ...
void backTrack(辅助变量:vector<vector<bool>> covered(二维网格已走过路径),int a,int b,int c(一维选择列表序号a,二维选择列表序号b,c),int target(遍历找到的条件)):
if(没找到的条件||越界||已covered;a b c,提前剪枝)return;
if(找到的条件&&==;a b c){
res.push_back(path);
return;
}   
visited[]=1;
operator(target);  
for(根据分支条件,遍历选择列表)
path.push_back(XXX);//选择
backtrack(...一般跟i有关...);
path.pop_back();//撤销选择
visited[]=0;
operator(target);
⑦bool backtrack()类型,注意使用||或运算
1) return backtrack()||backtrack()||backtrack();
2)if(越界条件||已covered条件||...)
(6)linear sweep(线性扫描+排序+O(N)):“双辅战队”
①双指针
1)三指针,一左一右一当前
//[,le)都是0
//[le,cur]都是1
//(cur,ri]未扫描检测
//(ri,]都是2
2)一快一慢,差两倍:
low=0,fast=0;
do{low++,fast+=2;}while(fast!=???||low!=fast);
3)一左一右:++le,--ri;
②滑动窗口
1)unordered_map<char,int>need,windows;//字符出现次数
2)[le,ri)
3)validCount==need.size():覆盖
4)4个问题思考
a.当移动 right 扩大窗口,即加入字符时,应该更新哪些数据?
b.什么条件下,窗口应该暂停扩大,开始移动 left 缩小窗口?
c.当移动 left 缩小窗口,即移出字符时,应该更新哪些数据?
d.我们要的结果应该在扩大窗口时还是缩小窗口时进行更新?
for(char c:p)++need[c];
int sSize=s.size(),pSize=p.size(),nSize=need.size();
int le=0,ri=0;
int validCount=0;
while(ri<sSize){//扩大窗口的条件
char c=s[ri++];//扩大窗口   
if(need.count(c))//更新数据
if(need[c]==++windows[c])
++validCount;            
while(缩小窗口的条件){// if(ri-le==pSize):固定窗口大小等于pSize,同步前进;while(validCount==nSize):窗口包含p的所有字符时,此时窗口大小>=pSize      
if(validCount==nSize)//找到答案的条件
res.push_back(le);
char c=s[le++];//缩小窗口            
if(need.count(c))//更新数据
if(need[c]==windows[c]--)
--validCount;
}
}
③递增/减栈
1)一般需要两遍,左到右+右到左
2)没有s.clear()函数;        stack<int>().swap(s);    while(s.size())s.pop();
3)for(int i=0;i<nums.size();s.push(i++)){//栈存的是数组下标
while(s.size()&&nums[s.top()]>nums[i])
operate(),s.pop(); 
④单调递增/递减队列
1)duque双向队列,队头为最值  
2)deque<int>d;//存的是数组下标,出现比较<>=时要特别注意写错比较对象
for(int i=0;i<k;++i){//进 滑动窗口前k个 
while(d.size()&&nums[i]>=nums[d.back()])
d.pop_back();
d.push_back(i);
}
res.push_back(nums[d.front()]);
for(int i=k;i<nSize;++i){
if(i-k==d.front())//出 最后一个
d.pop_front();
while(d.size()&&nums[i]>=nums[d.back()])//进最新一个
d.pop_back();
d.push_back(i);
res.push_back(nums[d.front()]);//取最值
}
⑤左右辅助数组left[],right[]
(7)O(longN):
①二分法
1)前提是有序或者变形有序(旋转有序)
2)两次二分法,一次找a,一次找b  
3)三分法:a=le+(ri-le)/3;b=ri-(ri-le)/3; le~a~b~ri
4)查找左右边界问题:二分查找最后一个/第一个 </<= >/>=的位置
a.先判断是左还是右
b.再判断nums[pos]</<=/>/>=target
0,1,2,3,4,5,6,7,8,9
2,2,2,2,3,3,4,4,6,6
le=0,ri=9;
c.最后一个index使得nums[index]</<=target    
int pos=-1;
while(le<=ri){
int mid=(le+ri)>>1;
if(nums[mid]</<=target)
pos=mid,le=mid+1;
else ri=mid-1;
}
return pos;
d.第一个index使得nums[index]>/>=target
int pos=-1;
while(le<=ri){
int mid=(le+ri)>>1;
if(nums[mid]>/>=target)
pos=mid,ri=mid-1;
else le=mid+1;
}
return pos;
e.应用
for (int i = le; i <=ri; i++)
if (isOK(i))//对应二分查找左边界/第一个满足条件的元素
return i;
->
②线段树
③优先队列priority_queue
1)struct ValKey{
int val;
int key;
ValKey():val(0),key(0){};
ValKey(int v,int k):val(v),key(k){};
bool operator >(const ValKey &vk)const{//greater 
if(val==vk.val)return key>vk.key;
return val>vk.val;
};
/* bool friend operator >(const ValKey &vk1,const ValKey &vk2){//friend不能跟const
return vk1.val>vk2.val;
}*/
bool operator <(const ValKey &vk)const{//less
if(val==vk.val)return key>vk.key;
return val<vk.val;
};
};
2)priority_queue<ValKey, vector<ValKey>, greater<ValKey> > c;
3)struct cmpGreater{  
bool operator()(ListNode *a,ListNode *b){
return a->val > b->val; }//>greater
4)priority_queue<ValKey, vector<ValKey>, cmpGreater > c
(8)Random+Rejection Sampling+Reservoir Sampling
①https://blog.csdn.net/qq_24854861/article/details/105725078
②rand_x(){return 1+rand()%x;}随机生成1~x
③rand_a()+(rand_b()-1)%a可以表示随机1~a*b,记作1~y,即rand_y()
④rand_y()(y>=a)随机表示rand_a()
int k=y/a;
do{int y=rand_y();}while(y>k*a);//拒绝采样
return 1+(y-1)%a;
⑤随机生成浮点数;const double M_PI=3.141592653;
1)random_device rd;//可有可无
2)mt19937 mt;      or     default_random_engine dre;
3)mt=mt19937(rd());      or        dre=default_random_engine(rd());//可有可无
4)uniform_real_distribution<double> randDouble{-1.0,1.0};
5)使用:randDouble(mt)    or randDouble(dre)
⑥累加和/前缀和+二分权重
1)selArray[i]=selArray[i-1]+targetArray[i]
2)int rd=rand()%selArray[selArray.size()-1]
3)while(le<=ri)    if(rd<=selArray[mid])pos=mid,ri=mid-1;else le=mid+1;
⑦二维转一维(一维vector用map替换)+尾指针前移:r行c列 rc=r*c;
1) resVal=selMap.count(rd)?selMap[rd]:sleMap[rd]=rd;
2) selMap[rd]=selMap.count(--rc)?selMap[rc]:rc;
3) res_r=resVal/c;res_c=resVal%c;
⑧蓄水池采样算法:从n(不知道n具体多少)个元素中等概率采样/取出k个元素
1)前k个目标元素入res数组
2)if(rand()%(k+cnt++)<k),则第k+cnt(cnt>=1)个目标元素随机替换res里面一个元素,即k/(k+cnt)概率采样/选择第k+cnt个目标元素入res
3)https://blog.csdn.net/qq_24854861/article/details/105745738
(9)极小化极大:两人玩游戏,一对都对,一错都错
①两人玩游戏,一人先手一人后手交替走,求先手能稳赢的情况(赢,输,平)
②回溯+后序遍历
③player==1:先手,存在一个返回值为true则true,否则false        或运算
④player==0:后手,全部都返回true才true,否则false(存在一个返回值为false)    与运算    
⑤剪枝+记忆化线索
1)alpha beta
2)bitset<N> visited;    +    unordered_map<unsigned long,int>mp;
(10)贪心算法
①动态规划性质+贪心性质:
1)当动态规划需要从0~i个dp[]中选择一个满足条件的最值时,考虑做出那个最有【潜力】,看起来最优的选择即可
2)一般动态规划超时的题目都是用贪心
②[input[i][0],input[i][1]]算出这些区间中最多有几个互不相交的区间==n-最小数里移除区间使剩下区间为无重叠区间==...
1)边界相同算/不算相交:x_end>/>=input[i][0]
2)static bool cmp(vector<int>&a,vector<int>&b){ return a[1]<=b[1];}
3)
sort(points.begin(),points.end(),cmp);
int cnt=1;
for(int i=1,x_end=points[0][1];i<iSize;++i)
if(points[i][0]>x_end){
++cnt;
x_end=points[i][1];
}
return cnt;//return iSize-cnt;
5.代码优化
(1)sort比较函数
①排序对象是自建结构体
1)bool operator  > (...){..};
2)... < ...
3)priority_queue<ValKey, vector<ValKey>, greater<ValKey> > c;
②排序对象是系统自带结构体
1)static bool cmp(...){...};
2)sort(...,cmp);
(2)字符串匹配
①KMP算法:dp[i]表示pattern[0~(i-1)]之间的相同前缀和后缀的长度,pattern[0~(i-1)]本身不算前缀或后缀
string text,pattern;    int i=0,j=-1;    vector<int>dp(pattern.size()+1)    dp[0]=-1;
while(i<pattern.size()){
if(j==-1||pattern[i]==pattern[j])
dp[++i]=++j;
else j=dp[j];}
i = 0, j = 0;     
while (i < text.size() && j < pattern.size()) {          
if(j == -1 || text[i] == pattern[j]) ++i,++j;
else j = dp[j];   
}    
if(j == pattern.size())          
return i-j+1;     
else          
return -1;
②Rabin-Karp算法:哈希映射,共d=256个字符(256进制数),
(3)自动机
class Automaton {
string state = "start";
unordered_map<string, vector<string>> table = {//table [当前状态]->[下一个状态]
{"start", {"start", "signed", "in_number", "end"}},//注意括号位置 
{"signed", {"end", "end", "in_number", "end"}},//vector.size和条件个数有关(0123)
{"in_number", {"end", "end", "in_number", "end"}},
{"end", {"end", "end", "end", "end"}}};
int getIndex(char c) {//输入
if ()) return 0;
else if () return 1;
else if () return 2;
else return 3;
}
public:
void get(char c) {
state = table[state][getIndex(c)];//是(c)不是[c]
if (state == ...) {
...
}
else if (state == ...)
...
else ...
}
};
①使用:Automaton am;
②while(...)am.get(c);
(4)set<vector<int>>res;//unordered_set<>里面的对象不能是vector<int>,最好是简单数据结构
(5)把多数情况的条件语句放在前面,如a,b,出现情况较少的条件放最后else,如c,可大幅度提升执行速度
①while(...)if(a)...else if(b)...else...
②最好按照最可能出现的情况排前面判断
(6)char二维数组->string一位数组
(7)数学函数
①sqrt开平方;log;log10;pow(a,b)几次方;exp e的几次方;ceil向上取整;floor向下取整
②max(v.size(),resMax);//错误    max((int)v.size(),resMax);//正确
(8)int mid = low + (high - low) / 2;比较好
①(high+low)/2容易越界出错
(9)const enum代替define 常量,inline代替define 函数
①类内常量:enum{a,b=0,c=0,d,e};
②const char const * const p;*左所指向数据不可变,*右指针不可变
③const char *&p[5];//从遍历名由内到外分析,p是一个引用,一个指针的引用,一个指向有5个char数据的数组的指针的引用,并且该指向数据不可变
(10)回字符串:反转reverse()
(11)for(int i=0;i<s.size();++i)
ss=ss+s[i]+'#';//ss+=s[i]+'#'会报错!即ss+=s1+s2不可行
①for(auto &i:s) ss=ss+i+'#';    if(s[i]==’#’)...    单个字符不用用”#”
②string s=’a’;报错
(12)if(!root||!root->left&&!root->right)return root;
(13)typedef vector<int>::iterator iter;    iter a=x.begin();
①using iter = vector<int>::iterator;    using iPtr = int*;    typedef int* iPtr;
②using array = int [4];    typedef int array [4];
(14)nullptr可以完全代替指针NULL,但像vector<int> v/vector<TreeNode*>v不是指针不能用nullptr置空,可以用{}置空;
(15)max(a,b);min(a,b);swap(a,b);find(it1,it2,value);lower_bound(it1,it2,value);
(16)for(auto &c:s)  for(auto c:s)    听说&c更高效
①for(auto it=m.begin();it!=m.end();++it)         it->first/second:key/value
②for(auto it:m)    m.first/m.second
③for(auto &a:b)  for(auto &b:c)  b=5; 
1)会直接改变c里面的值,没有&则不会
2)多层auto,除了最内层可&可不&,其他层必须带上&
④for(vector<TreeNode*>::iterator it=v.begin();it!=v.end();++it)被遍历对象不是常用数据结构时不能使用auto
⑤decltype(表达式/函数) it;it的类型和表达式的返回类型一样,但不会计算该表达式/函数
(17)ListNode* head=new ListNode(-1);     ListNode* h=head;        if(h)    h=h->next;
(18)int Nmin=INT_MIN; int Nmax=INT_MAX;
(19)queue<pair<TreeNode*,int> >q;    q.push({root, 1});    q.pop();  pair<int, int> b(1, 2);
①b.first    b.second
②q.push(make_pair(root,1));
(20)
(21)位运算:a=pow(2,x); 乘除a用移位,模a用与运算
①求某个数二进制中1的个数
1)n & (n - 1) 可以消除 n 最后的一个1<<==>>n&(n-1)==0:n是2的幂次方

②位反转:
for(int i=0;i<32;i++)        if(((n>>i)&1) != 0)    tmp |= 1<<(31-i);
③位置1:     temp|= 1<<(n-1);
④位置0:    temp&= ~(1<<(n-1))
⑤取第n位的值:    temp=(temp>>(n-1))&1
⑥异或:不进位加法,同为0异为1; 与+左移1位:进位;
⑦2^N时间复杂度/子集:bitSet=1<<nums.size(); for(int i=0;i<bitSet;++i)
0~2^(nums.size()-1) i的第j位为0表示不选择,1反之
(22)链表:
①伪头+释放节点
1)LinkNode* LN=new LinkNode(0);    LN->next=head;    
2)LinkNode *pre=LN/nullptr,*cur=head,*next=nullptr,*toDelete=nullptr;
3)...while(cur){next=cur->next;cur->next=pre;pre=cur;cur=next;}...
4)...if(toDelete){delete toDelete,toDelete=nullptr;}...
5)toDelete=LN,LN=LN->next;
6)delete toDelete;
7)return LN    ;
②快慢指针:
1)前后差两倍速度slow=head;fast=head or fast=head->next;
if(!head||head->next==head)return head;
if(!head->next)return nullptr;
ListNode *low=head,*fast=head;
do{
low=low->next,fast=fast->next->next;
}while(fast&&fast->next&&low!=fast);
if(!fast||!fast->next)return nullptr;
fast=head;
while(low!=fast)
low=low->next, fast=fast->next;
return low;
2)前后差固定值n
③swap也可以交换结构体指针,swap(ListNode1,ListNode2)
(23)考虑元素为空或者为1的特殊情况if(!head||!head->next)return head;
(24)数组下标差值范围限定+对应数组差值范围限定:|n[j]-n[i]|<=a&&|j-i|<=b
①滑动窗口+map/set(有序)+lower_bound
②auto x=s.lower_bound(n[j]-a);    //n[i]-a<=n[j]
③x!=s.end()&&*x<=n[j]+a            //n[j]<=n[i]+a
④if(s.size()==b+1)s.erase(n[j-b]);
(25)1<=x<=26:滑动窗口
(26)二叉树遍历
①层序遍历
1)1
if(!root)return nullptr;
queue<TreeNode*> q;    q.push(root);
while(q.size()){
int size=q.size();
while(size--){
TreeNode* p=q.front();    q.pop();    
//处理节点
if(p->left)q.push(p->left);
if(p->right)q.push(p->right);
}
}
2)2
if(!root)return nullptr;
queue<TreeNode*> q;    q.push(root);
while(q.size()){
int size=q.size();
while(size--){
TreeNode* p=q.front();    q.pop();    
if(p){
//处理节点
q.push(p->left);
q.push(p->right);
}
}
}
3)3


②morris二叉树遍历:时间复杂度O(n),空间复杂度O(1)
1)记忆口诀:循环当前,左右到底,右子有无,当前左右,后前前中
后左尾头,右子反转,next开头,首尾相接,遍历反转
2) morris遍历时,此时若还有线索未解锁则不能直接返回函数,否则报错
3)前中后代码框架
TreeNode *cur=root,*temp=nullptr;
while(cur){
temp=cur->left;
if(temp){
while(temp->right&&temp->right!=cur)
temp=temp->right;
if(temp->right){
temp->right=nullptr;
//后序节点处理
}
else{
temp->right=cur;
//前序节点处理
cur=cur->left;
continue;
}           
}
else
//前序节点处理
//中序节点处理
cur=cur->right;
}
4)中序
void InOrder(TreeNode* root){//morris中序(左,根,右)
TreeNode *cur=root,*pre=nullptr,*temp=nullptr;
while(cur){
temp=cur->left;
if(temp){
while(temp->right&&temp->right!=cur)
temp=temp->right;
if(temp->right)
temp->right=nullptr;
else{
temp->right=cur;
cur=cur->left;
continue;
}
}
operate(cur),pre=cur;//如果需要用到前驱节点则需定义pre,否则不用
cur=cur->right;
}
}
5)前序
void PreOrder(TreeNode* root){//morris前序(根,左,右)
TreeNode *cur=root,*pre=nullptr,*temp=nullptr;
while(cur){
temp=cur->left;
if(temp){
while(temp->right&&temp->right!=cur)
temp=temp->right;
if(temp->right)
temp->right=nullptr;
else{
temp->right=cur;
operate(cur),pre=cur;//如果需要用到前驱节点则需定义pre,否则不用
cur=cur->left;
continue;
}
}
else
operate(cur),pre=cur;//如果需要用到前驱节点则需定义pre,否则不用
cur=cur->right;
}
}
6)后序
void PostOrder(TreeNode* root){//morris前序(左,右, 根)
TreeNode *cur=root,*pre=nullptr,*temp=nullptr;
while(cur){
temp=cur->left;
if(temp){
while(temp->right&&temp->right!=cur)
temp=temp->right;
if(temp->right){
temp->right=nullptr;
PostHelper(cur->left);
}
else{
temp->right=cur;
cur=cur->left;
continue;
}
}     
cur=cur->right;
}
operate(head)
}

void PostHelper(TreeNode* root){
//1 链表(右)逆序,头节点为root
TreeNode *cur=root,*pre=nullptr,*next=nullptr;
while(cur){//next开头,首位相接,方便记忆,如下
next=cur->right;//next=cur->right=pre=cur=next
cur->right=pre;
pre=cur;
cur=next;
}
//2 右边界逆序遍历
cur=pre;//此时头节点为pre
while(cur){
operate(cur);
cur=cur->right;
}
//3 链表(右)逆序,头节点为pre
cur=pre,pre=nullptr,next=nullptr;
while(cur){
next=cur->right;
cur->right=pre;
pre=cur;
cur=next;
}
}
③迭代遍历
1)记忆口诀
当前有栈,循环入当,左t右p,p后取值,中反tp,后反左右,后右空前
2)前序框架(中后序都有此推导记忆)        
void preorder(TreeNode* root) {
stack<TreeNode*> S;
TreeNode* cur = root;
while(cur || S.size()){
while(cur){
S.push(cur);
operate(cur->val);//                
cur=cur->left;
}
cur=S.top();            
cur=cur->right;//
S.pop();//
}      
}
void preorder(TreeNode* root) {
if(!root)return;
stack<TreeNode*> S;
TreeNode* cur = root;
S.push(cur);
while(S.size()){
cur=S.top();
S.pop();
...
if(cur->left)S.push(cur->left);
if(cur->right)S.push(cur->right);
}    
}  
void preorder(TreeNode* root) {
if(!root)return;
stack<TreeNode*> S;
TreeNode* cur = root;
S.push(cur);
while(S.size()){
cur=S.top();
S.pop();
if(cur){
...
S.push(cur->left);
S.push(cur->right);
}
}    
}  
void preorder(TreeNode* r1,TreeNode* t2) {
if(!t1)return t2;
else if(!t2)return t1;
stack<pair<TreeNode*,TreeNode*> > s;
pair<TreeNode*,TreeNode*> cur={t1,t2};
s.push(cur);
while(s.size()){
cur=s.top(),s.pop();
//处理节点            
if(cur.first->left||cur.second->left){
if(!cur.first->left&&cur.second->left)
cur.first->left=new TreeNode(0);
else if(cur.first->left&&!cur.second->left)
cur.second->left=new TreeNode(0);             
s.push(pair{cur.first->left,cur.second->left});
}             
if(cur.first->right||cur.second->right){
if(!cur.first->right&&cur.second->right)
cur.first->right=new TreeNode(0);
else if(cur.first->right&&!cur.second->right)
cur.second->right=new TreeNode(0);             
s.push(pair{cur.first->right,cur.second->right});
}               
}
}  


3)中序        
void inorder(TreeNode* root) {
stack<TreeNode*> S;
TreeNode* cur = root;
while(cur || S.size()){
while(cur){
S.push(cur);                
cur=cur->left;
}
cur=S.top();
S.pop();//
operate(cur->val);//
cur=cur->right;//
}      
}     
4)后序1    
void postorder1(TreeNode* root) {
stack<TreeNode*> S;
TreeNode* cur = root;
vector<int> v;
while(cur || S.size()){
while(cur){
S.push(cur);
v.push_back(cur->val);//            
cur=cur->right;//
}
cur=S.top();            
cur=cur->left;//
S.pop();
}   
reverse(v.begin(),v.end());//
opreate(v);//
}
5)后序2
void postorder(TreeNode* root) {
stack<TreeNode*> S;
TreeNode* cur = root,*pre=nullptr;
while(cur || S.size()){
while(cur){
S.push(cur);
operate(cur->val);//                
cur=cur->left;
}
cur=S.top();    
if(cur->right==nullptr||cur->right==pre){//
S.pop();
operate(cur->val);
pre=cur;
cur=nullptr;
}
else    
cur=cur->right;//            
}      
}
(27)序列化二叉树为某序的字符串
①层序
TreeNode* cur=root;
queue<TreeNode*> q;
q.push(cur);
while(q.size()){
int qs=q.size();
while(qs--){
cur=q.front(),q.pop();    
if(cur){
res+=to_string(cur->val)+",";
q.push(cur->left),q.push(cur->right);
}
else     res+="#,";          
}
}
②前中后
string serialize(TreeNode* root) {
if (root == NULL)
return "#";
return to_string(root->val) + "," + serialize(root->left) + "," + serialize(root->right) + ",";
}
(28)递归转迭代循环的通用方法

(29)两栈实现队列:一出队列栈,一入队列栈
(30)两队列实现栈+一队列实现栈
①指针交换而不是整个队列拷贝:swap(q1,q2);
②每次进栈都循环移位队列
(31)(运算符优先级):等不等于(==/!=)>按位运算(& | ^ ~)>与或条件判断(&& ||)
return num>0&&num&0x55555555==num&&num&(num-1)==0;
①位运算 i<<1 等效于 i/2  (i<<1)|1 等效于  i/2+1
(32)log(exp(n))    log10(n)        
①double x=log10(a)/log10(b);         x==int(x)?整数:非整数;
②用log(n),以e为底容易错,小数太多
(33)size() 目前容器正拥有的元素个数
capacity() 容器能储存的元素个数,即容量
reserve() 重新指定容器能存储数据的个数
resize() 重新指定容器有效的元素个数
设元素原本的v.size()是n 当调用v.resize(m)后,有两种情况:
1.若 m < n ,则只保存容器前m个元素
2.若m > n ,则容器之前储存的n个元素不变,不足m的部分补0
调用v.resize(m,val)将不足的部分用val填充
(34)交换数组元素
vector<int> XXX(vector<int>& nums1, vector<int>& nums2) {
if (nums1.size() > nums2.size()) 
return XXX(nums2, nums1);
...
}
(35)连续元素和为k的子数组个数:
①map[累计和sum]++;
②count=map.find(sum-k)!=map.end()?count+map[sum-k]:count;
(36)注意有无符号左移不一样情况:int a;    a=unsigned(a)<<1;
(37)//平方 pow()    int a = pow(4,2);// 4的平方=16
//开方    int b = pow(4,0.5);// 4的平方根=2    int c = sqrt(4);// 4的平方根=2
//整数绝对值int c = abs(b-c);     //浮点数绝对值double d = fabs(b-c);
(38)审题:abcaaaaaaa
①字串/子字符串:必须是连续的,abc是,aa不是
②子序列:顺序取出,不一定是连续的,aa是,
(39)线段树=leIndex+riIndex+leftPtr+rightPtr
https://blog.csdn.net/qq_24854861/article/details/105306753

(40)并查集:处理复杂DFS问题 一维O(N) 二维O(MN)
①二维,注意并查的对象:网格坐标还是网格点坐标
②初始化+查找+合并+是否连通+集合个数+元素个数
③父节点+秩+元素+集合:“父子圆寂”
④特征
1)自反:x和x是连通的
2)对称性:(x,y)是连通的,则(y,x)也是连通的
3)传递性:(x,y),(y,z)是连通的,则(x,z)是连通的
⑤套用模板后,真正自己要做的事是遍历找出两个元素要合并的条件,然后进行合并即可
class UnionFind{
vector<int>parent,rank,size;//指向父节点,秩/高度,该集合里的元素个数
int cnt;//集合个数
unordered_map<int,list<int>>traversChild;//遍历该集合内的元素
public:
UnionFind(vector<vector<char>>& board){
int m=board.size(),n=board[0].size();
cnt=m*n;
parent.resize(cnt);
rank.resize(cnt,1);
size.resize(cnt,1);
for(int i=0;i<cnt;++i)
parent[i]=i,traverseChild[i].push_back(i);        
}
UnionFind(int n){
cnt=n;
parent.resize(n);
rank.resize(n,1);
size.resize(cnt,1);
for(int i=0;i<n;++i)
parent[i]=i,traverseChild[i].push_back(i);  
}
int Find(int x){
return x==parent[x]?x:(parent[x]=Find(parent[x]));
}
void Union(int a,int b){
int fa=Find(a),fb=Find(b);
if(fa==fb)return;
if(rank[fa]>rank[fb]){
parent[fb]=fa;            
size[fa]+=size[fb];
//traverseChild[fa].splice(traverseChild[fa].end(),traverseChild[fb]);//无序
traverseChild[fa].merge(traverseChild[fb]);//默认升序
traverseChild.erase(fb);
}
else if(rank[fa]<rank[fb]){
parent[fa]=fb;
size[fb]+=size[fa]; 
traverseChild[fb].merge(traverseChild[fa]);  
traverseChild.erase(fb);         
}
else{
parent[fa]=fb;
size[fb]+=size[fa];
++rank[fb];
traverseChild[fb].merge(traverseChild[fa]);
traverseChild.erase(fb);
}
--cnt;
}
list<int> getTraverse(int x){
int fa=Find(x);
return traverseChild[fa];
}
bool isConnected(int a,int b){
int fa=Find(a),fb=Find(b);
return fa==fb;
}
int getCnt(){
return cnt;
}
int getSize(int x){
return size[Find(x)];
}
};
(41)拓扑排序(一维存入度,二维存出度,队列遍历0入度节点)
①https://blog.csdn.net/qq_24854861/article/details/105441337
(42)排序:冒选插    快堆归希    计基桶
①https://blog.csdn.net/qq_24854861/article/details/105466059    

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 扫盲-Quartz 入门详解

    用R1框架的quartz写个定时服务,先自扫盲,之前用过,未深入了解入门简介:基本上任何公司都会用到调度这个功能, 比如我们公司需要定期执行调度生成报表, 或者比如博客什么的定时更新之类的,都可以靠Quartz来完成。正如官网所说,小到独立应用大到大型电子商务网站, Quart…...

    2024/4/17 0:44:58
  2. hadoop知识点(二)

    hadoop伪分布式安装1.安装前准备工作1.1JDK安装1.2.SSH免密登录2.HDFS的安装2.1上传文件2.2HDFS环境配置2.3HDFS文件配置2.4HDFS格式化(仅限第一次)2.5启动nn snn2.6.HDFS的使用2.6.1创建用户2.6.2创建文件夹2.6.3将linux中文件上传到hadoop (-put)2.6.4计算2.6.5 将hadoop…...

    2024/4/18 15:58:59
  3. 从零开始学前端 - 1. HTML基础知识

    作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正。转载请附带作者信息及出处。从零开始学前端 - 1. HTML基础知识一、HTML 发展历史二、HTML 基本骨架1. 文档声明2. html 标…...

    2024/4/20 1:59:09
  4. adobe acrobat pro dc 更新后正常体验使用

    adobe acrobat pro dc 更新后破解失效怎么解决? 文章整理来源于网络,仅供参考和个人学习。 [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Adobe\Adobe Acrobat\DC\Activation] “IsAMTEnforced”=dword:00000001 注册表新增这个键值dword32类型,数值1。然后重新用AMTEmu0.9.2…...

    2024/4/17 4:04:43
  5. 计算机图形学笔记——第4章 输出图元 Python实现

    第4章 输出图元 图形软件包中用来描述各种图形元素的函数称为图形输出原语(graphics output primitive)或简称为图元(primitive)。描述对象几何要素的输出图元一般称为几何图元(geometric primitive)。 坐标系统 为了描述图形,必须首先确定一个称为世界坐标系的合适的三…...

    2024/4/17 4:04:43
  6. 分子对接软件大比拼

    文献报道过的或者没报道过的分子对接软件有很多,很多最初都是由实验室开发,免费发布。当软件很完善,没有什么缺陷时,可能会被专门的商业软件公司购买,就变成了某个大型软件包中的模块。 其实不止分子对接软件,其他还有药效团软件、定量构效关系软件、数据库筛选软件等,都…...

    2024/4/17 4:05:01
  7. Java工程师对于学历的要求高吗?如何能提高面试成功率?

    从事Java开发已经十多年了,关于学历和面试,我谈谈自己的看法。先简单地说说学历的事儿:在我看来,学历很重要:我毕业于一个普通的本科学校,这个学历已经让我失去了很多面试的机会,是的,有很多公司,如果你的学历不高、学校一般,是连面试机会都没有的(我的学历是我们公…...

    2024/4/19 0:58:38
  8. 企业为什么要建设数据分析平台?应该怎么建?

    大数据时代,几乎每一个企业都对数据分析平台趋之若鹜,尤其是在今年疫情爆发之后,更多的企业主意识到了数据所具有的的极大商业价值,以及其作为支撑企业信息智能化的无形资产。通常来说,企业内部的运营和业务系统每天会积累下大量历史数据,一些企业最多是对一些零散的数据…...

    2024/3/28 7:29:12
  9. MTK平台基于EV1527的无线接收和发射程序

    EV1527 功能描述1:每一帧码有 25 位,同步位(syn)的高低电平宽度为 t:31t(先高后低),其余每一位码的码形有两种,称为“0”码和“1”码;“0”码是一个高低电平宽度比为 t:3t 的脉冲(先高后低),“1”码是一个高低电平宽度比为 3t:t 的脉冲(先高后低);一帧码发完马上…...

    2024/4/17 4:05:01
  10. JavaMD5加密

    Java实现MD5加密 什么是MD5: MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 使用方法: 1、引入maven坐标,导入相应的包 在pom.xml中引入包的坐…...

    2024/4/17 4:05:07
  11. ICARUS 主题配置 | Hexo

    文章目录安装样式网站 logo博客 logo导航栏置顶首页首页改成其他页面首页文章折叠关于功能目录评论打赏搜索阅读量统计参考 ICARUS 是一个三栏结构的自适应主题,样式简洁大气预置了大量第三方插件,配置方便,本文主要是介绍一些常用的配置项。 安装在博客根目录下执行# your_…...

    2024/4/17 4:05:13
  12. Nginx 屏蔽ip地址的方法

    转载来源 ; Nginx 屏蔽ip地址的方法 : http://www.safebase.cn/article-258999-1.html摘要: 在网站维护过程中,有时候我们需要对一些IP地址或是一些IP段进行封锁拉黑,使其不能访问网站。 如果你的网站服务器的网站运行环境是由nginx搭建的,那么下面所说的在nginx中禁止ip的方…...

    2024/4/17 4:04:43
  13. uniapp电商app开启下拉刷新的方法(页面级及组件级)

    页面开启下拉刷新 页面开启下拉刷新可以通过onPullDownRefresh这个页面级的下拉监听函数进行处理。 在 js 中定义 onPullDownRefresh 处理函数(和onLoad等生命周期函数同级),监听该页面用户下拉刷新事件。 需要在 pages.json 里,找到的当前页面的pages节点,并在 style 选项…...

    2024/4/17 4:04:55
  14. JavaScript(九)Boolean 对象

    Boolean 对象方法toString():把布尔值转换为字符串,并返回结果。 valueOf():返回 Boolean 对象的原始值。toString()toString() 方法可把一个逻辑值转换为字符串,并返回结果。语法: boolean.toString()valueOf()valueOf() 方法可返回 Boolean 对象的原始值。语法: boolea…...

    2024/4/17 4:04:37
  15. Apache的模式以及线程进程概念(六)

    文章目录一、线程与进程的概念多进程与多线程的概念线程与进程的区别二、模块介绍1、Prefork配置方式2.Worker配置方式3.eventkeep-alive配置方式 因为Apache的模式中会有一些进程线程的知识,所以如果想要搞懂Apache的模式的不同一定要明白进程与线程之间是怎样的一种关系 一、…...

    2024/4/17 4:04:37
  16. Runnable和Callable的区别

    Runnable和Callable相同点和区别相同点:两者都是接口;都可用来实现多线程程序;都需要调用Thread.start()启动线程;不同点:两者最大的不同点是:实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果;Callable接口的call()方法允许抛出异…...

    2024/4/17 4:04:49
  17. 配音任务

    ...

    2024/4/17 4:05:07
  18. __init__() takes 0 positional arguments but 1 was given

    今天写爬虫的时候,写了一个自定义的类,在写初始化函数def init():出现了以下问题:仔细查阅文档,发现原来Python3中的def__init__()函数与之前相比发生了些许变化,是需要带有一定参数的。 1.def init(self): 这种形式在__init__方法中,只有一个self,指的是实例的本身,但…...

    2024/4/17 4:04:55
  19. AutoDock进行柔性分子对接教程

    Autodock是一款分子对接软件包,开源且免费,官方网址是http://autodock.scripps.edu/,目前最新的版本是AutoDock 4.2.6,包括AutoDock和AutoGrid两个模块,AutoDock软件包下载地址为http://autodock.scripps.edu/downloads/autodock-registration/autodock-4-2-download-page…...

    2024/4/17 4:04:43
  20. Python 每日一记265@Java图的优先广度遍历(邻接表实现的图)

    广度优先遍历的概念就不多加叙述了,简而言之就是访问一个顶点,然后访问完这个顶点的所有邻接顶点,再访问每一个邻接顶点的所有邻接顶点,为了实现这个方法,必须使用辅助队列,之前对于邻接数组下的遍历已经介绍过,这里是邻接表实现的图,直接上代码了。 java代码实现packa…...

    2024/4/19 14:38:18

最新文章

  1. 【.net core】【sqlsugar】批量更新方法

    官方文档&#xff1a;单表更新、更新数据 - SqlSugar 5x - .NET果糖网 泛型类中增加 //更新单个实体 public async Task<int> Update(TEntity entity) {//IgnoreColumns(ignoreAllNullColumns: true)&#xff1a;忽略设置为跳过的列return await _db.Updateable(entity…...

    2024/4/20 13:27:41
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 题解 -- 第六届蓝桥杯大赛软件赛决赛C/C++ 大学 C 组

    https://www.lanqiao.cn/paper/ 1 . 分机号 模拟就行 : inline void solve(){int n 0 ;for(int a1;a<9;a){for(int b0;b<9;b){for(int c0;c<9;c){if(a>b && b>c){n ;}}}}cout << n << endl ; } 2 . 五星填数 直接调用全排列的库函数…...

    2024/4/19 11:36:20
  4. 缓冲区溢出漏洞学习总结(漏洞原理及其利用方法)

    文章目录 前言1、缓冲区溢出漏洞概述1.1、漏洞概述1.2、缓冲区溢出漏洞概述1.3、缓冲区溢出攻击概述1.4、引发缓冲区溢出的原因 2、栈溢出漏洞2.1、栈溢出漏洞概述2.2、栈溢出漏洞利用2.2.1、利用方法一&#xff1a;修改返回地址2.2.2、利用方法二&#xff1a;覆盖临接变量 3、…...

    2024/4/19 11:54:05
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/19 14:24:02
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/19 18:20:22
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/19 11:57:31
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/19 11:57:31
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/19 11:57:52
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/19 11:57:53
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/19 11:58:14
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/19 11:58:20
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/20 7:40:48
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/19 11:58:39
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/19 11:58:51
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/20 3:12:02
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/19 11:59:15
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/19 11:59:23
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/19 11:59:44
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/19 11:59:48
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/19 12:00:06
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/19 16:57:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/19 12:00:25
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/19 12:00:40
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57