题解 | 旋转数组

旋转数组

https://www.nowcoder.com/practice/e19927a8fd5d477794dac67096862042

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 旋转数组
     * @param n int整型 数组长度
     * @param m int整型 右移距离
     * @param a int整型一维数组 给定数组
     * @return int整型一维数组
     */
    public int[] solve (int n, int m, int[] a) {
        // write code here
        //使用链表实现,将前m-n个元素放入队列中,再进行合并
        if (n == 0 || a == null) {
            return a;
        }

        // 防止 m 大于数组长度,取模找到真实的移动步数
        m = m % n;
        if (m == 0) {
            return a;
        }

        Queue<Integer> queue = new LinkedList<>();

        // 向右移动 m 位,等价于把前 n-m 个元素挪到最后面
        // 把前 n-m 个元素加入队列保存起来
        for (int i = 0; i < n - m; i++) {
            queue.offer(a[i]);
        }

        // 把数组后面剩下的 m 个元素,平移到数组最前面
        for (int i = 0; i < m; i++) {
            a[i] = a[i + n - m];
        }

        // 把队列里存好的元素,依次追加到数组后面
        for (int i = m; i < n; i++) {
            a[i] = queue.poll();
        }

        return a;
    }
}

全部评论

相关推荐

牛客100866号技...:把电科加粗,把电科加粗,把电科加粗,两个吊车尾的项目合并成一个,再加一个管理系统。电科✌🏻在成都面中厂手拿把掐
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务