java leetcode 旋转数组

本文详细讲解了如何通过反转策略,使用三个函数来实现在给定数组`arr`中元素向右移动k个位置的方法,适用于整数数组,如[1,2,3,4,5,6,7],当k=5时,最终输出为[7,6,5,4,3,2,1]。涉及到了数组反转和部分区域反转的技巧。

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数

int[] arr = new int[]{1,2,3,4,5,6,7};

想移动5个位置

k = 5

我们可以先反转整个数组
然后再前后数据反转,如下图在这里插入图片描述
先写个反转函数

    public static void reverse(int[] arr,int start,int end){

		//左小于右边,进行交换,直到左边大于等于右边才停止
        while(start < end){
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
            start++;
            end--;

        }
    }

再定义一个函数,此函数调用三次
k mod 数组长度等于要移动的位数
函数内的 k - 1 是因为要要取到在数组中第五位元素
调用三次,首先先反转数组
再将 k 左边和右边的元素反转

    public static void route(int[] nums,int k){
        k = k % nums.length;
		//反转整个数组
        reverse(nums,0,nums.length - 1);
        //反转左边的
        reverse(nums,0,k - 1);
        //反转右边的
        reverse(nums,k,nums.length - 1);
    }

main方法调用route函数
遍历输出反转后的数组

    public static void main(String[] args) {

        int[] arr = new int[]{1,2,3,4,5,6,7};

		//调用route函数
        route(arr,5);

        for (int i : arr) {
            System.out.print(i + "\t");
        }
    }

输出

7654321

源代码如下

    public static void main(String[] args) {

        int[] arr = new int[]{1,2,3,4,5,6,7};

        route(arr,5);

        for (int i : arr) {
            System.out.println(i);
        }
    }
    
    public static void route(int[] nums,int k){
        k = k % nums.length;

        reverse(nums,0,nums.length - 1);
        reverse(nums,0,k - 1);
        reverse(nums,k,nums.length - 1);
    }

    public static void reverse(int[] arr,int start,int end){

        while(start < end){

            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
            start++;
            end--;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值