有趣的算法(3)数组移动位置

时间:2019-09-25
本文章向大家介绍有趣的算法(3)数组移动位置,主要包括有趣的算法(3)数组移动位置使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目:

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:

输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
示例 2:

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释: 
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]

数组问题遇事不决旋转一下

1 2 3 4
k=2
整体旋转
4 3 2 1
旋转前2个
3 4 2 1
旋转后面两个
3 4 1 2
成就达成!

那么思路其实很简单,首先写个倒序算法

然后调用3次倒序算法就可以了

class Solution {
    public void rotate(int[] nums, int k) {
        transArray(nums,0,nums.length-1);
        transArray(nums,0,k-1);
        transArray(nums,k,nums.length-1);
    }
    public static void transArray(int[] nums, int start, int end){
        int arr_length = end + 1 - start;       
        int tmp = 0;
        for(int i=start;i<start+arr_length/2;i++){
            tmp = nums[i];
            nums[i] = nums[end-i+start];
            nums[end-i+start] = tmp;
        }
    }
}

推导出end-i+start的过程出了点错误。

原文地址:https://www.cnblogs.com/daysn/p/11587484.html