- 陈泽文 的博客
8-25总结
- @ 2024-8-25 20:03:27
1 最长最短单词
头指针记录开头,尾指针记录结尾。单词的长度为j-i。最后找出长度最长和最短单词就行了。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
int maxx=0,minn=100,dz=0,xz=0;
getline(cin,s);
int len=s.size();
for(int i=0;i<=len;i++)
{
int j=i;
while(s[j]<='z'&&s[j]>='a'||s[j]>='A'&&s[j]<='Z')
{
j++;
}
if(j-i<minn)
{
minn=j-i;
xz=i;
}
if(j-i>maxx)
{
maxx=j-i;
dz=i;
}
i=j;
}
for(int i=dz;i<=dz+maxx-1;i++)
{
cout<<s[i];
}
cout<<endl;
for(int i=xz;i<=xz+minn-1;i++)
{
cout<<s[i];
}
return 0;
}
2 数组求和
因为a和b都是不降序的所以,开始时i为1,j为n。那么,如果a[i]+b[j]大于k那么j--,如果小于k那么i++。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int main()
{
int n,m,k;
cin>>n>>m>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<m;i++)
{
cin>>b[i];
}
for(int i=0;i<n;i++)
{
int j=m-1;
while(b[j]+a[i]>k)
{
j--;
}
if(a[i]+b[j]==k)
{
cout<<i<<' '<<j;
break;
}
}
return 0;
}