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;
        }
    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值