20201213周回顾
1,再把这个写一遍…
2,山形数组出错了,小细节问题。
3,连接两个链表
Error - Found cycle in the ListNode
链表中发现循环
细节问题
4,设计前中后队列
错误原因我见过 内存清洗什么的address sanitizer
因为没写 if(q.empty()) return -1;
5,最大重复子字符串…
唉感觉不太会这题
还是挺好想的,没那么难
这个还是最顺利的…一遍过。
6,k和数对的最大数目。。。
感觉这个是挺久的了。
这个hashmap,key是值对吧,value是标记号?
还行,但是内部机制感觉还是不是很懂
再就是选择的else结构要加条件的话
记得写程else if(…)的形式。
7,连续连接2进制数字
只记得是在十进制的天空下
恩错了
我记成选择结构我傻了
还是理解不深
8,拼接最大数,
真是woc这么长。
首先定义名整这么长的就是sb。
int start = max(0, k - n), end = min(k, m);
这段我终于看懂了
不错。。。。先把主函数写出来了
感觉像这个单调栈求子序列呢
还是枚举一个东西比较好,
这个ms函数呢只能说懂了一些,还需要更多的例子去模拟它才能理解更深。
其实就是用数组模拟栈呗。
真累噢4点到8.30了…
compare
这段
return (x - index1) - (y - index2);
不太懂。。
还是得模拟有时间再看把。
expected unqualified-id是GCC的默认报错。在GCC遇到语法错误又不知道报什么错的时候,基本上就会看到expected unqualified-id
vector maxNumber(vector& nums1, vector& nums2, int k) {
int m=nums1.size();
int n=nums2.size();
vector<int> ans(k,0);
int start=max(0,k-n);
int end=min(k,m);
for(int i=start;i<=end;i++)
{
vector<int> s1(ms(nums1,i));
vector<int> s2(ms(nums2,k-i));
vector<int> curms(merge(s1,s2));
if(compare(ans,0,curms,0))
{
ans.swap(curms);
}
}
return ans;
}
vector<int> ms(vector<int>&num,int k)
{
int top=-1;
int length=num.size();
int remain=length-k;
vector<int> stack(k,0);
for(int i=0;i<length;i++)
{
int nums=num[i];
while(top>=0&&stack[top]<nums&&remain>0)
{
top--;
remain--;
}
if(top<length-1)
{
stack[++top]=nums;
}
else
{
remain--;
}
}
return stack;
}
vector<int>merge(vector<int>&s1,vector<int>&s2)
{
int x=s1.size();
int y=s2.size();
int ml=x+y;
vector<int> merged(ml);
int in1=0;
int in2=0;
if(x==0)
{return s2;}
if(y==0)
{return s1;}
for(int i=0;i<ml;i++)
{
if(compare(s1,in1,s2,in2)>0)
{
merged[i]=s1[in1++];
}
else
{
merged[i]=s2[in2++];
}
}
return merged;
}
int compare(vector<int>&s1,int in1,vector<int>&s2,int in2)
{
int x=s1.size();
int y=s2.size();
while(in1<x&&in2<y)
{
int di=s1[in1]-s2[in2];
if(di!=0)
{
return di;
}
in1++;
in2++;
}
return (x-in1)-(y-in2);
}
};
错了以后再看把
上一篇: 20201213c亲密数