2022-04-26 「189. 轮转数组」

今日中等题:https://leetcode-cn.com/problems/rotate-array/

哈哈开始还疑惑,这么简单的题怎么可能是中等,咔咔一顿操作提交完,才发现自己没认真看要求,O(1)空间复杂度,我这种新开辟数组空间的就妥妥地不满足了。
难怪题目开始就是void类型,导致我做了两次遍历,第一次把新数组组装好,第二次把数值替换进旧数组。

参考了题解,思路就是做3次翻转,比如nums= [1,2,3,4,5,6,7], k=3:

  1. 把[1,2,3,4,5,6,7]头尾交换,变成[7,6,5,4,3,2,1]
  2. 把前3位做头尾交换,变成[5,6,7,4,3,2,1]
  3. 把后4位做头尾交换,变成[5,6,7,1,2,3,4]

看下我稀碎的答案:

class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        int[] ans = new int[n];
        for (int i=0;i<n;i++){
            int m = (i+k) % n;
            ans[m] = nums[i];
        }
        for (int j=0;j<n;j++){
            nums[j]=ans[j];
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 进阶: 尽可能想出更多的解决方案,至少有三...
    Abeants阅读 916评论 0 0
  • 问题链接 189. 轮转数组[https://leetcode-cn.com/problems/rotate-ar...
    alex很累阅读 1,436评论 0 0
  • 前言 2019.10.27日打卡 算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同,但是耗费...
    程序员七哥阅读 3,352评论 0 12
  • 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 进阶: 尽可能想出更多的解决方案,至少有三...
    刻苦驴哝阅读 890评论 0 0
  • 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数 尽可能想出更多的解决方案,至少有三种不同的方...
    Shimmer_阅读 955评论 0 1