翻转数组

翻转数组

题目

给定一个含有N个数的数组循环向右移K位(k>0) 例如abcd1234–>1234abcd

方法一:遍历求解法

思路:很容易想到把前面的数向后面移动保存需要移动到前面的数例如:abcd1234->4abcd123while一直循环直到k小于0时间复杂度为O(N*K)

代码实现:

/**
     * 思路:把前面的数向后移位
     * @param arr
     * @param k
     */
    public static void arrayNumCyclicShift(int [] arr,int k){
        if(arr==null || arr.length==0) return;
        //定义一个变量保存需要移动的值
        int temp,i;
        while (k>0){
            temp=arr[arr.length-1];
            for (int j = arr.length-1; j >0; j--) {
                arr[j]=arr[j-1];
            }
            arr[0]=temp;
            k--;
        }
    }

方法二:交换法

思路:把数组拆分成两个数组 abcd1234–>1234abcd 先把abcd翻转dcba 后1234 4321 最后把dcba4321翻转成1234abcd

 public static void arrayNumCyclicShift1(int [] arr,int start,int end){
        while (start<end){
            int temp=arr[start];
            arr[start]=arr[end];
            arr[end]=temp;
            start++;
            end--;
        }
    }

测试代码:

  public static void main(String[] args) {
        int[] arr=new int[]{1,2,3,4,5,6,7,8};
        System.out.print("翻转前:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
        System.out.println();
        arrayNumCyclicShift(arr,4);
        System.out.print("翻转后:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
        int len=arr.length;
        int k=4;
        arrayNumCyclicShift1(arr,0,len-k-1);
        arrayNumCyclicShift1(arr,len-k,len-1);
        arrayNumCyclicShift1(arr,0,len-1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }

    }

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值