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

    将包含 n 个元素的数组向右旋转 k 步。
    例如,如果  n = 7 ,  k = 3,给定数组  [1,2,3,4,5,6,7]  ,向右旋转后的结果为 [5,6,7,1,2,3,4]。
    注意:
    尽可能找到更多的解决方案,这里最少有三种不同的方法解决这个问题。

    详见:https://leetcode.com/problems/rotate-array/description/

    Java实现:

    方法一:

    class Solution {
        public void rotate(int[] nums, int k) {
            int n=nums.length;
            k%=n;
            reverseArray(nums,0,n-1);
            reverseArray(nums,0,k-1);
            reverseArray(nums,k,n-1);
        }
        private void reverseArray(int[] nums,int start,int end){
            while(start<end){
                nums[start]=nums[start]+nums[end];
                nums[end]=nums[start]-nums[end];
                nums[start]=nums[start]-nums[end];
                ++start;
                --end;
            }
        }
    }
    

    方法二:

    class Solution {
        public void rotate(int[] nums, int k) {
            int n=nums.length;
            int[] copy=Arrays.copyOf(nums,n);
            for(int i=0;i<n;++i){
                nums[(i+k)%n]=copy[i];
            }
        }
    }

    方法三:

    class Solution {
        public void rotate(int[] nums, int k) {
            int n = nums.length;
            int start = 0;
            while (n != 0 && (k %= n) != 0) {
                for (int i = 0; i < k; ++i) {
                    swap(nums, i + start, n - k + i + start);
                }
                n -= k;
                start += k;
            }
        }
    
        private void swap(int[] nums, int i, int j) {
            int tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }
    }

    参考:https://www.cnblogs.com/grandyang/p/4298711.html

  • 相关阅读:
    vs2015编译各种库
    回测分析软件
    交易平台
    策略框架
    期货homes平台以及仿ctp接口
    k线中转器
    期货数据服务器以及取数据接口
    c++ 二叉树的遍历(迭代,递归)
    c++实现单向链表的一些操作
    numpy操作
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8745278.html
Copyright © 2011-2022 走看看