zoukankan      html  css  js  c++  java
  • 第 2 章 第 3 题 数组旋转问题 平移算法实现1

    问题分析

      输入:目标数组,旋转位数。

      处理:将目标数组旋转指定的位数。

      约束:无

    解答思路

      设数组长度 n,旋转位数 r。

      首先将数组前 r 个元素暂存,然后将数组后面的 n-r 个元素移动到前端,最后将暂存的这 r 个元素填充到数组尾部。

    代码实现

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 // 数组旋转函数
     6 void rotate(int *array, int n, int r);
     7 
     8 int main(void)
     9 {
    10     // 建立并初始化,输出测试数组。
    11     int array[10];
    12     int n=10;
    13     for (int i=0; i<10; i++) {
    14         array[i] = i+1;
    15     }
    16     cout << "目标数组:" << endl;
    17     for (int i=0; i<10; i++) {
    18         cout << array[i] << " ";
    19     }
    20     cout << endl;
    21 
    22     // 获取旋转位数
    23     int r;
    24     cout << "旋转位数:";
    25     cin >> r;
    26 
    27     // 处理旋转位数
    28     if (r<0) {
    29         cout << "非法的旋转位数" << endl;
    30         return 0;
    31     }
    32     else
    33         r %= n;
    34 
    35     // 调用数组旋转函数
    36     rotate(array, n, r);
    37 
    38     // 打印旋转结果
    39     cout << endl << "旋转后的数组:" << endl;
    40     for (int i=0; i<10; i++) {
    41         cout << array[i] << " ";
    42     }
    43     cout << endl;
    44 
    45     return 0;
    46 }
    47     
    48 void rotate(int *array, int n, int r) {
    49     // 开辟动态数组temp暂存前面r个元素
    50     int * temp = new int[r];
    51 
    52     // 将前r个元素存放至temp
    53     for (int i=0; i<r; i++) {
    54         temp[i] = array[i];
    55     }
    56     // 将后面n-i个元素移动到数组前端
    57     for (int i=0; i<n-i; i++) {
    58         array[i] = array[i+r];
    59     }
    60     // 将暂存的元素填充到数组尾部 
    61     for (int i=0; i<r; i++) {
    62         array[n-r+i] = temp[i];
    63     }
    64 
    65     // 释放内存空间
    66     delete []temp;
    67 }

    运行测试

      

    小结

      这种思路实现简单,可是有较大的内存消耗( 见代码50行 )。

  • 相关阅读:
    278.First Bad Version
    277. Find the Celebrity
    256.Paint House
    276. Paint Fence
    275. H-Index II
    274. H-Index
    273. Integer to English Words
    272. Closest Binary Search Tree Value II
    270. Closest Binary Search Tree Value
    271. Encode and Decode Strings
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3343723.html
Copyright © 2011-2022 走看看