其他分享
首页 > 其他分享> > 招行提前批笔试

招行提前批笔试

作者:互联网

第一题:1-n个人排队,现在站队为数组num1;每个人都可以往左走任意个位置,问最小需要走几个人,可以走成目标数组的样子来拍照?

例子:6

4 6 3 2 1 5

4 2 3 5 6 1

输出3次;

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main() {
 4     int length;
 5     cin>> length;
 6     int answer = 0;
 7     set<int>ans;
 8     stack<int> stack1,stack2;
 9     for(int i= 0;i<length;i++) {
10         int num;
11         cin >> num;
12         stack1.push(num);
13     }
14     for(int i= 0;i<length;i++) {
15         int num;
16         cin >> num;
17         stack2.push(num);
18     }
19     //用两个栈来保存两个队伍;stack2为需排成的队伍;
20     while(!stack1.empty()&&!stack2.empty()){
21         int numofs1 = stack1.top();
22         int numofs2 = stack2.top();
23         //不需要移动,出栈
24         if(numofs1 == numofs2){
25             stack1.pop();
26             stack2.pop();
27         }
28         else{
29             //已经移动过了,在最合适的位置
30             if(ans.count(numofs2)) stack2.pop();
31             else {
32                 //没移动过,需要移动到合适位置,计数加1,并且从比较栈出栈。
33                 answer += 1;
34                 ans.insert(numofs1);
35                 stack1.pop();
36             }
37         }
38     }
39     cout << ans.size();
40     return 0;
41 }

 

标签:招行,int,笔试,pop,num,numofs2,stack1,stack2,提前
来源: https://www.cnblogs.com/cotoyo25/p/16207750.html