• Rotate Array


    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.

    一:三次翻转,c++stl中就有这个算法

    class Solution {
    public:
        void reverse(vector<int>& nums,int startPos,int endPos)
        {
            int i=startPos,j=endPos-1;
            while(i<j){
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
                i++;j--;
            }
        }
        void rotate(vector<int>& nums, int k) {
            if(k<=0){
                return;
            }
            int numsSize = nums.size();
            k = k%numsSize;
            reverse(nums,0,numsSize-k);
            reverse(nums,numsSize-k,numsSize);
            reverse(nums,0,numsSize);
        }
    };

    2:使用一个辅助空间O(k)的辅助空间

    代码不多说,太简单

    3:递推计算每个字符的位置,循环n次

    class Solution {
    public:
        void rotate(vector<int>& nums, int k) {
            if(k<=0){
                return;
            }
            int numsSize = nums.size();
            int start = 0,i=0;
            while(i<numsSize){
                int nextIndex = (start+k)%numsSize;
                int curVal = nums[start];
                while(nextIndex!=start){
                    int tmp = nums[nextIndex];
                    nums[nextIndex] = curVal;
                    curVal = tmp;
                    nextIndex = (nextIndex+k)%numsSize;
                    i++;
                }
                nums[nextIndex] = curVal;
                i++;
                start++;
            }
        }
    };
  • 相关阅读:
    WTL介绍
    创业创意
    VelocityTracker简单介绍
    strip 命令的使用方法
    CFileDialog的使用方法简单介绍
    讨论oracle在rowid和rownum
    java entry
    24点经典算法
    char与byte差异
    蓝牙设计
  • 原文地址:https://www.cnblogs.com/zengzy/p/4959358.html
Copyright © 2020-2023  润新知