翻转数组
描述
原地翻转给出的数组 nums
原地意味着不能使用额外空间
【样例】
样例 1:
输入 : nums = [1,2,5]
输出 : [5,2,1]
【方法】
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
void reverseArray(vector<int> &nums) {
int size = nums.size();
int sizeSub = size / 2;
for (int i = 0; i < sizeSub; i++) {
// a1 = 5, a = 2, b = 3 ==> a1 = a + b ==> 5 = 2 + 3
nums[i] = nums[i] + nums[size - 1 - i];
// b = a1 - b ==> b = 5 - 3 == 2 ==> b = 2
nums[size - 1 - i] = nums[i] - nums[size - 1 - i];
// a = a1 - b ==> a = 5 - 2 == 3 ==> a = 3
nums[i] = nums[i] - nums[size - 1 - i];
}
}
int main() {
vector<int> nums;
int totals = 0; // 测试数据个数
printf("请输入测试数据个数:");
while (scanf("%d", &totals) != EOF) {
printf("\n请输入 nums 的内容:\n");
for (int i = 0; i < totals; i++) {
int n = 0;
scanf("%d", &n);
nums.push_back(n);
}
// 原地翻转 nums
reverseArray(nums);
printf("\n原地翻转 nums 后的内容:\n");
int size = nums.size();
for (int i = 0; i < size; i++) {
printf("%d ", nums[i]);
}
printf("\n");
// 清空原有数据,开始新的测试
nums.clear();
printf("========================\n\n请输入测试数据个数:");
}
return 0;
}
【结果】
请输入测试数据个数:5
请输入 nums 的内容:
1 3 5 10 6
原地翻转 nums 后的内容:
6 10 5 3 1
========================
请输入测试数据个数:4
请输入 nums 的内容:
3 69 52 18
原地翻转 nums 后的内容:
18 52 69 3
========================
请输入测试数据个数:3
请输入 nums 的内容:
1 2 5
原地翻转 nums 后的内容:
5 2 1
========================