数组反转试题解答

来源:互联网 发布:眼睛发光ps软件 编辑:程序博客网 时间:2024/05/16 15:26

题目:

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.


解答:

#include "stdafx.h"

#include "map"
#include "string"
using namespace std;
void ReversArray(int a[], int s, int e);
void rotate(int nums[], int n, int k);


int main(int argc, char* argv[])
{
    int tem[] = {1, 2, 3, 4,5,6,7,8,9,10};
int temp = sizeof(tem)/sizeof(int);
for (int i = 0;i < temp;i++)
{
printf(" tem[%d] = %d \n", i, tem[i]);
}
printf(" tem befor\n");
    rotate(tem, 10, 3);
for (i = 0;i < temp;i++)
{
printf(" tem[%d] = %d \n", i, tem[i]);
}



return 0;
}


void ReversArray(int a[], int s, int e)
{
    for (int i = s, j = e; i < j; i++, j--)
    {
        swap(a[i], a[j]);
    }
}


void rotate(int nums[], int n, int k) 
{
    k = k%n;
    if (k == 0)
        return;
    ReversArray(nums, 0, n-1);
    ReversArray(nums, 0, k-1);
    ReversArray(nums, k, n-1);
}
0 0
原创粉丝点击