0813科大讯飞笔试 第三题 个人思路

思路:
其实就是统计两个排列之间相同的子数组个数,用总的子数组个数减去重复的即可。
我们把第一个排列当作是基准数列,意思是第一个序列是我们规定的从小到大的排序。
根据第一个排列处理第二个排列,得到新的第二个排列,如果第二个排列的某个区间是1,2,3..这样递增的,那么这个区间的子数组就是重复的,减去即可。

时间复杂度:O(n)
代码:
```
#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N = 2e5+9;
int a[N],b[N];
int pos[N],c[N];
signed main() {

int n;
cin>>n;
for(int i=1; i<=n; ++i) cin>>a[i],pos[a[i]]=i;
for(int i=1; i<=n; ++i) cin>>b[i],b[i]=pos[b[i]];
int ans=n*(n+1); //如果 
for(int i=1; i<=n; ++i){
int j=i+1;
while(j<=n){
if(b[j-1]!=b[j]-1) break;
c[j++]=1;
}
//i~j-1就是递增的 ,递增的就会重复 
int nn = j-i;
ans-=nn*(nn+1)/2;
i=j-1;
//cout<<ans<<endl;
}
cout<<ans<<'\n';
return 0;
}
/*
3
1 2 3
2 3 1

3
1 2 3
1 3 2

3
2 3 1
1 2 3

*/
```
全部评论
用的排列组合再加全排列,100%
点赞 回复 分享
发布于 2023-08-13 18:55 上海
100%吗?卡超时?
点赞 回复 分享
发布于 2023-08-13 17:20 广东
你咋还能拍照咧
点赞 回复 分享
发布于 2023-08-13 17:08 广东

相关推荐

双非本科,211硕士。自学java半年,想去找一个实习,求大佬们锐评一下简历
nsjbambmbs:简历一写就是微服务,一问实际就俩服务,简历一写就是高并发一问 QPS 个位数既然写了微服务,那我出系统设计题场景题也没啥问题吧
点赞 评论 收藏
分享
2025-12-25 16:26
已编辑
河北科技学院 Java
勇敢的牛油不服输:2800-300那不等于2500一个月吗兄弟们
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2025-11-12 16:29
已编辑
北京小厂 运维开发 23k*15薪 硕士211
牛客28967172...:无脑云智。 虽然牛客都嘲笑你们内包仔,但云智你合同上签约对象是"腾讯云(武汉)公司",社招跳槽时你别提云智就吹腾讯云出来的,这个title保你百分百能无缝跳中大厂绝对没问题。选云智你现在钱少点,打的时候程序员生涯后半部分更好起点。 但你北京小厂现在能拿点钱,后面跳槽时怎么办?直接泯然众人,后半生涯没半点优势加成。
点赞 评论 收藏
分享
评论
2
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务