【三次翻转】旋转数组

求解代码

java 复制代码
public int[] solve(int n, int m, int[] a) {
        m %= n;
        reverse(a, 0, n - 1);
        reverse(a, 0, m - 1);
        reverse(a, m, n - 1);
        return a;
    }

    private void reverse(int[] arr, int start, int end) {
        while (start < end) {
            swap(arr, start++, end--);
        }

    }

    private void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

小贴士

因为右移 n 位 = 没动右移 n + k 位 = 右移 k 位

所以,要通过取余操作把 m 压缩到 [0, n-1] 范围。

相关推荐
NEGl DRYN2 分钟前
Go基础之环境搭建
开发语言·后端·golang
AI木马人3 分钟前
20.人工智能实战:大模型项目如何从 Demo 走向生产?一套可落地的上线验收清单与工程治理方案
java·开发语言·人工智能
CandyU25 分钟前
Unity —— 反射
java·开发语言
初心未改HD7 分钟前
Go Modules:依赖管理的完全指南
开发语言·golang
楼田莉子7 分钟前
仿照Muduo的高并发服务器:EventLoop模块及与TimeWheel模块联调
java·开发语言
小雅痞9 分钟前
[Java][Leetcode middle] 3. 无重复字符的最长子串
java·开发语言·leetcode
SamDeepThinking10 分钟前
为什么你做技术方案总是漏掉边界情况
java·后端·程序员
逻辑驱动的ken20 分钟前
Java高频面试考点场景题21
java·开发语言·面试·职场和发展·求职招聘
rOuN STAT27 分钟前
Golang 构建学习
开发语言·学习·golang
番茄去哪了28 分钟前
单体转微服务:正确的拆分思路与实战原则(上)
java·微服务·架构