【三次翻转】旋转数组

求解代码

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] 范围。

相关推荐
小王不爱笑1322 小时前
IO 模型
开发语言·python
短剑重铸之日2 小时前
《ShardingSphere解读》07 读写分离:如何集成分库分表+数据库主从架构?
java·数据库·后端·架构·shardingsphere·分库分表
知我Deja_Vu2 小时前
【避坑指南】ConcurrentHashMap 并发计数优化实战
java·开发语言·python
AI+程序员在路上2 小时前
CANopen 协议:介绍、调试命令与应用
linux·c语言·开发语言·网络
2401_831824962 小时前
基于C++的区块链实现
开发语言·c++·算法
m0_518019483 小时前
C++与机器学习框架
开发语言·c++·算法
ZTLJQ3 小时前
深入理解逻辑回归:从数学原理到实战应用
开发语言·python·机器学习
qq_417695053 小时前
C++中的代理模式高级应用
开发语言·c++·算法
daidaidaiyu3 小时前
Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)
java·spring
波波0074 小时前
每日一题:.NET 中的“反射”是什么?
开发语言·.net