leetcode189:轮转数组

leetcode189轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

最大公约数法:

时间复杂度O(n^2)

空间复杂度O(1)

解析:

k和数组长度的最大公约数为n

代表数据可以分为n组去移动

做n次循环向后移动k位即可

java 复制代码
public void rotate(int[] nums, int k) {
        if(k>=nums.length){
            k = k%nums.length;
        }
        if(k == 0) {
            return;
        }
        int tmpa = k;
        int tmpb = nums.length;
        int tmpc = 0;
        while(tmpb != 0){
            tmpc = tmpa%tmpb;
            tmpa = tmpb;
            tmpb = tmpc;
        }

        for (int j = 0; j< tmpa; j++) {
                //下一次要存的位置
                int res = k+j;
                int start = nums[j];
                for (int i = 0; i < nums.length/tmpa; i++) {
                    int end = nums[res%nums.length];
                    nums[res] = start;
                    res = (res + k) % nums.length;
                    start = end;
                }
        }
    }
三次反转法

解析:

1234567->5671234

即->7654321-> 765 4321 ->567 1234

三次反转完成

java 复制代码
 public void rotate(int[] nums, int k) {
        if(k>=nums.length){
            k = k%nums.length;
        }
        if(k == 0) {
            return;
        }
        this.reverse(nums,0,nums.length-1);
        this.reverse(nums,0,k-1);
        this.reverse(nums,k,nums.length-1);
    }

    public void reverse(int[] nums,int start,int end){
        int tmp = 0;
        while(start < end){
            tmp = nums[start];
            nums[start] = nums[end];
            nums[end] = tmp;
            start++;
            end--;
        }
    }
相关推荐
都叫我大帅哥10 分钟前
深入解剖Shenandoah GC:Java低延迟垃圾回收的终极武器
java·jvm
带只拖鞋去流浪17 分钟前
Java文件读写(IO、NIO)
java·开发语言·nio
戴誉杰40 分钟前
JAVA 程序员cursor 和idea 结合编程
java·ide·intellij-idea·cursor
2501_924747111 小时前
驾驶场景玩手机识别准确率↑32%:陌讯动态特征融合算法实战解析
人工智能·算法·计算机视觉·智能手机
阿狗哲哲1 小时前
Java选手如何看待Golang
java·开发语言·golang
limitless_peter2 小时前
优先队列,链表优化
c++·算法·链表
屁股割了还要学4 小时前
【数据结构入门】栈和队列
c语言·开发语言·数据结构·学习·算法·青少年编程
Monkey的自我迭代4 小时前
支持向量机(SVM)算法依赖的数学知识详解
算法·机器学习·支持向量机
苹果醋34 小时前
React Native jpush-react-native极光推送 iOS生产环境接收不到推送
java·运维·spring boot·mysql·nginx
老华带你飞4 小时前
数码论坛|基于SprinBoot+vue的数码论坛系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·数码论坛系统