给定一个由若干整数组成的数组nums,请检查数 组是否是由某个子数组重复循环拼接而成,请输出 这个最小的子数组。 〕输入描述 第一行输入数组中元素个数n, 1<=n<=100000 第第二行输入数组的数字序列nums,以空格分割,0<= nums[i] < 10: 输出描述 输出最小的子数组的数字序列,以空格分割;
时间: 2024-02-17 18:00:34 浏览: 74
好的,这是一个检查数组是否由某个子数组重复循环拼接而成的问题,我可以给你一个简单的实现思路。首先,将原数组拼接自身,得到一个新数组,然后从新数组中找到第一个和原数组第一个元素相同的元素,以此作为循环节的起点,然后再判断从这个起点开始,是否能够组成整个原数组。如果可以,那么这个循环节就是最小的子数组。下面是代码实现:
```
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
vector<int> new_nums(nums.begin(), nums.end());
new_nums.insert(new_nums.end(), nums.begin(), nums.end());
int start = 0;
for (int i = 1; i < new_nums.size(); i++) {
if (new_nums[i] == nums[start]) {
start++;
if (start == nums.size()) {
cout << nums[0];
for (int j = 1; j < start; j++) {
cout << " " << nums[j];
}
cout << endl;
return 0;
}
} else {
start = 0;
}
}
return 0;
}
```
以上代码实现了从标准输入中读取数据,检查是否由某个子数组重复循环拼接而成,并输出最小的子数组。
阅读全文