翻转数组

翻转数组

描述
原地翻转给出的数组 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
========================
posted @ 2022-02-12 21:01  hellozwx  阅读(73)  评论(0编辑  收藏  举报