本题本质上就是寻找b数组中的值在a数组上的位置,且每找到一个就将a中找到的那个值移动到数组第一位。移动的操作为:用e储存要移动到首位的值,然后用循环将其前面的所有数向后移动一位,最后将e放在首位。
理解之后算法比较简单,用函数更加简洁。
#include<stdio.h> int main() { int n,q,i,j=0,l=0,e,h=0; scanf("%d%d",&n,&q); int a[300001],b[300001],c[300001]; for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<q;i++) { scanf("%d",&b[i]); } while(1) { if(h==q+1) break; if(b[h]==a[j]) { c[l]=j+1;l++; e=a[j]; for(i=j-1;i>=0;i--) { a[i+1]=a[i]; } a[0]=e; j=-1;h++; } j++; } for(i=0;i<q;i++) { if(i==q-1) { printf("%d",c[i]);break; } printf("%d ",c[i]); } return 0; }
全部评论
(0) 回帖