判断一串无重复数字的有限序列是否可由某种操作得到
输入格式
输入有两行,第一行是一个正整数 N(1≤N≤100),表示输入序列的长度,第二行是序列a,共有 N 个整数,表示要得到的目标序列。序列为 1 到 N 的排列,即序列a长度为 N,保证序列中的整数都不相同,且整数在区间 [1, N] 内。
输出格式
输出一行,如果能通过编写的程序得到序列a,则输出YES,否则输出NO。
样例输入:
5
2 1 5 4 3
样例输出:
YES
考点:栈的操作
首先创建Stack类
1 class Stack { 2 private: 3 int * elements; 4 int max_size, top_index; 5 public: 6 Stack(int input_size) { 7 max_size = input_size; 8 elements = new int[max_size]; 9 top_index = -1; 10 } 11 ~Stack() { 12 delete[] elements; 13 } 14 void push(const int &elem) { 15 if (top_index >= max_size - 1) { 16 return; 17 } 18 top_index ++; 19 elements[top_index] = elem; 20 } 21 void pop() { 22 if (top_index < 0) { 23 return; 24 } 25 top_index --; 26 } 27 int top() { 28 assert(top_index >= 0); 29 return elements[top_index]; 30 } 31 bool empty() { 32 return top_index < 0; 33 } 34 };
接下来是重点,main函数
1 int main() { 2 int n; 3 cin >> n; 4 int arr[n]; 5 Stack stack(n); 6 int temp = 0; 7 for (int i = 0; i < n; i++) { 8 cin >> arr[i]; 9 } 10 for (int i = 0; i < n; i++) { 11 stack.push(i+1); 12 while (!stack.empty()) { 13 if (stack.top() == arr[temp]) { 14 stack.pop(); 15 temp ++; 16 } else { 17 break; 18 } 19 } 20 } 21 if (stack.empty()) { 22 cout << "YES" << endl; 23 } else { 24 cout << "NO" << endl; 25 } 26 27 return 0; 28 }

浙公网安备 33010602011771号