题解
【入门】数字交换
1 条题解
-
0
解题思路
两段长度相同,先把位置改成数组下标,再交换对应位置的数字。
参考代码
// 先读入题目给出的数据。 // 再按照题目要求进行计算。 // 最后按规定格式输出答案。 #include <iostream> using namespace std; int main() { int n, a[20], l1, r1, l2, r2; cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; cin >> l1 >> r1 >> l2 >> r2; // 题目中的位置从1开始,数组下标要减1。 l1--; r1--; l2--; r2--; // 两段长度相同,逐个交换对应位置的数字。 for (int i = 0; i <= r1 - l1; i++) { int t = a[l1 + i]; a[l1 + i] = a[l2 + i]; a[l2 + i] = t; } for (int i = 0; i < n; i++) cout << a[i] << (i + 1 == n ? '\n' : ' '); return 0; }复杂度分析
排序需要 O(n^2) 时间;其余循环按照实际遍历次数计算。代码使用固定大小数组,额外空间复杂度为 O(1) 或 O(n)。
- 1