招行提前批笔试
作者:互联网
第一题: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