zoukankan      html  css  js  c++  java
  • LeetCode Rotate Array 旋转数组

    这个题居然没有记录。原地旋转数组可以见编程珠玑,在JDK代码中也可以找到(Collections.rotate),提供了两种方式一种是做三次reverse,还有一种则是进行遍历替换。

    第一种方式:

     1 class Solution {
     2 public:
     3     void rotate(int nums[], int n, int k) {
     4         if (nums == NULL || n <= 1) {
     5             return;
     6         }
     7         k = k % n;
     8         reverse(nums, 0, n);
     9         reverse(nums, 0, k);
    10         reverse(nums, k, n);
    11     }
    12     
    13     void reverse(int nums[], int start, int end) {
    14         int p = start;
    15         int q = end-1;
    16         while (p < q) {
    17             swap(nums[p], nums[q]);
    18             p++, q--;
    19         }
    20     }
    21 };

    第二种方式:

     1 class Solution {
     2 public:
     3     void rotate(int nums[], int n, int k) {
     4         k = k % n;
     5         int cnt = n;
     6         for (int cycle_start = 0; cnt; cycle_start++) {
     7             int i = (cycle_start + k) % n;
     8             int replaced = nums[cycle_start];
     9             
    10             while (i != cycle_start) {
    11                 swap(replaced, nums[i]);
    12                 i = (i + k) % n;
    13                 cnt--;
    14             }
    15             nums[cycle_start] = replaced;
    16             cnt--;
    17         }
    18     }
    19 };

    对于第二种方式如果n和k是互质的话进行一轮while循环就可以完成

  • 相关阅读:
    vim使用技巧
    排序
    2020-3-27 学习面向对象的笔记
    小圆圈第三章答案
    内置函数部分用法
    Pycharm快捷键
    小猿圈第二章答案
    Typora学习笔记
    AI的真实感
    Unity 横版2D移动跳跃问题——关于一段跳与二段跳
  • 原文地址:https://www.cnblogs.com/lailailai/p/4440929.html
Copyright © 2011-2022 走看看