2011年408的算法题

0 结果

在这里插入图片描述

1 题目

在这里插入图片描述

2 思路

倒置数组,将数组从头到尾逆置一遍,再从1到p和p+1到n再分别逆置。

3 实现

#include <cstdio>
#include <cstdlib>

const int n = 6;//数组大小
void Reverse(int* &L, int l, int r){//倒置数组
    for(int i = 0;i < (r - l + 1)/2; i++){
        int temp = *(L + (l - 1) + i);
        *(L + (l - 1) + i) = *(L + (r - 1) - i);
        *(L + (r - 1) - i) = temp;
    }
}
void Func(int* &L, int p, int n){//三次倒置
    Reverse(L, 1, n);
    Reverse(L, 1, p);
    Reverse(L, p + 1, n);
}

int main(){
    int* R;
    R = (int*)malloc(sizeof(int) * n);
    for (int i = 0; i < n; ++i) {
        *(R + i) = i + 1;
    }
    int p = 2;
    Func(R, p, n);
    for (int i = 0; i < 6; ++i) {
        printf("%d ", *(R + i));
    }

    return  0;
}

时间复杂度:O(n)
空间复杂度:O(1)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页