不交换数组,逐个暴力插入

旋转数组

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

import java.util.*;


public class Solution {
    /**
	从第0个位置开始,将第0个位置的值移入第 (0+m)%n 个位置,需要提前保存下一个位置的值,做 n 次操作。
	问题一:当 m 是奇数,可以直接按总思路处理。
	问题二:当 m 是偶数,需要操作两次,因为会 nextIndex 会循环会第一个位置。
	*/
    public int[] solve (int n, int m, int[] a) {
        // write code here
        if(a.length <= 1) return a;
        if(m > n) m = m % n;
        if(m % 2 == 0) {
            // 两次
            insertNext(0, n/2, a, n, m);
            insertNext(1, n/2, a, n, m);
        } else {
            // 一次
            insertNext(0, n, a, n, m);
        }
        return a;
    }

    public void insertNext(int curIndex, int count, int[] a, int n, int m) {
        int curValue = a[curIndex];
        int nextIndex = (curIndex + m) % n;
        int nextValue = a[nextIndex];
        for(int i=0; i<count; i++) {
            a[nextIndex] = curValue;
            curIndex = nextIndex;
            curValue = nextValue;
            nextIndex = (curIndex + m) % n;
            nextValue = a[nextIndex];
        }
    }
}

全部评论

相关推荐

01-07 15:50
四川大学 Java
明远湖摸鱼:同年级的同学,,简历可以大一点,这个有点太密集了,实习技术可以量化的尽量量化
点赞 评论 收藏
分享
Dream_coding:你是不是只投大厂了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务