20250228-Rain

1. 一维数组

/*
1. 数字环
有一个长度为n的数字环, 将每个数字往后移动m位, 使其成为一个新的数字环
输入: 
第一行: 整数n  表示有n个数字
第二行: n个整数Ni, 表示数字环的每个元素
第三行: 整数m  表示每个元素需要往后移动m位
输出: 移动后的新数字环
(1<=m<n<100, MIN_INT<Ni<MAX_INT)
*/

#include <iostream>
#include <vector>

using namespace std;

void reverse(vector<int>& nums, int left, int right)
{
    while(left < right)
    {
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
        left++;
        right--;
    }
}

int main(void)
{
    int n;
    cout << "Please input 'n': ";
    cin >> n;

    vector<int> N(n, 0);
    cout << "Please input 'N[]'(space to separate): " << endl;
    for(int i = 0; i < n; i++)
    {
        cin >> N[i];
    }

    int m;
    cout << "Please input 'm': " << endl;
    cin >> m;

    reverse(N, 0, n - 1);
    reverse(N, 0, m - 1);
    reverse(N, m, n - 1);

    // output
    for(int i = 0; i < n; i++)
    {
        cout << N[i] << " ";
    }
    cout << endl;
    
    return 0;
}

2. 多维数组

3. 一维数组

或使用一个新数组保存结果元素。

逻辑简化。空间复杂度变高,但可以减少调用 erase.()

或使用 C++unique() 方法

Last updated