其他分享
首页 > 其他分享> > leetbook 旋转数组

leetbook 旋转数组

作者:互联网

标题leetbook 旋转数组

第一次 写一些关于每次刷题遇到困难的题的题解,跟大家分享

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

写一个我自己知道的解法吧

当第一眼看到这道题的时候是很蒙的,但是翻阅解体思路后会豁然开朗。用这种思路会很简单,都不觉得是中等难度的题,主要还是看对基础知识的扎实度吧

输入: nums = [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]

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2skh7/
来源:力扣(LeetCode)

本题主要是对数组的排序,最开始接触的是反转排序,这道题可以看做是三次的反转吧,我是这样理解的:
第一次反转,把数组全部反转
第二次反转,把数组从0到 k长度-1 反转
第三次反转,把数组从k反转到num.length.
这样就实现了从某个位置对数组的反转

private static void sum(int[] nums, int k) {
        int n=nums.length;
        //这里k有可能是大于数组长度的整数,所以要让k对整个数组取于。
        k%=n;
        //三次反转过程,调用reverse方法
        reverse(nums,0,n-1);
        reverse(nums,0,k-1);
        reverse(nums,k,n-1);
    }
//reserxe方法,实现数组长度从k到i的反转
    private static void reverse(int[] nums, int k, int i) {
        while (k<i){
            int temp=nums[i];
            nums[k++]=nums[i];
            nums[i--]=temp;
        }
    }

看不出这是一道中级难度的算法题吧,想想算法解题可以很高效,代码还可以很简单,这应该就是算法的魅力。
第一篇中级题打卡,坚持…

标签:reverse,nums,int,反转,旋转,leetbook,数组
来源: https://blog.csdn.net/m0_56506584/article/details/117394982