[构造] aw3730. 寻找序列(模拟+构造)
Posted Ypuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[构造] aw3730. 寻找序列(模拟+构造)相关的知识,希望对你有一定的参考价值。
1. 题目来源
链接:3730. 寻找序列
2. 题目解析
构造题目。
三个长度相同数组,在相同下标下,这三个数组元素各不相同。
要求使用这三个数组中的元素构造出一个新数组,使得新数组相邻两数不同,且首尾元素不同。
很明显可以直接构造,首先第一个元素在三个数组中首位元素任意选一个,然后后面直到倒数第二个都只需要和前一个保持不同即可。最后一个需要和倒数第二个且和第一个元素保持不同。
实际上,本题如果不加首尾元素不同这个要求的话,只需要两个数组就够了。
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
常规写法:
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int n;
int a[N], b[N], c[N];
int main() {
int T;
cin >> T;
while (T -- ) {
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
for (int i = 0; i < n; i ++ ) cin >> b[i];
for (int i = 0; i < n; i ++ ) cin >> c[i];
int last = -1;
for (int i = 0; i < n - 1; i ++ ) {
if (!i) {
last = a[0];
cout << last << ' ';
continue;
}
if (last != a[i]) last = a[i];
else if (last != b[i]) last = b[i];
else if (last != c[i]) last = c[i];
cout << last << ' ';
}
if (a[n - 1] != last && a[n - 1] != a[0]) cout << a[n - 1];
else if (b[n - 1] != last && b[n - 1] != a[0]) cout << b[n - 1];
else if (c[n - 1] != last && c[n - 1] != a[0]) cout << c[n - 1];
cout << endl;
}
return 0;
}
y 总的写法,数据组织的不错:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int a[4][N];
int main()
{
int T;
cin >> T;
while (T -- )
{
cin >> n;
for (int i = 0; i < 3; i ++ )
for (int j = 0; j < n; j ++ )
cin >> a[i][j];
a[3][0] = a[0][0];
for (int i = 1; i < n - 1; i ++ )
for (int j = 0; j < 3; j ++ )
if (a[3][i - 1] != a[j][i])
{
a[3][i] = a[j][i];
break;
}
for (int i = 0; i < 3; i ++ )
if (a[i][n - 1] != a[3][0] && a[i][n - 1] != a[3][n - 2])
{
a[3][n - 1] = a[i][n - 1];
break;
}
for (int i = 0; i < n; i ++ ) cout << a[3][i] << ' ';
cout << endl;
}
return 0;
}
以上是关于[构造] aw3730. 寻找序列(模拟+构造)的主要内容,如果未能解决你的问题,请参考以下文章
使用 jest 模拟 AWS.DynamoDB.DocumentClient 的构造函数
LeetCode | 0106. Construct Binary Tree from Inorder and Postorder Traversal从中序与后序遍历序列构造二叉树Python(示(代