旋转数组

 

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

示例 1:

输入: [1,2,3,4,5,6,7]k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]

示例 2:

输入: [-1,-100,3,99]k = 2
输出: [3,99,-1,-100]
解释: 
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]

代码:

package leetcode;

import java.util.Arrays;
import java.util.Scanner;

/**
 * Created by Orange_X on 2019/11/21.
 */
public class Main{
    public static void main(String[] args) {
        int a[]={1,2,3,4,5,6,7};
        int b[]=new int[a.length];
        //ps:我的想法是看成一个顺时针排序环,初始start在1上。然后根据拨动的码数(n 非负数)来调整位置,n超过a.length(一周期),就%a.length获取新码数
        Scanner in=new Scanner(System.in);
        int x=in.nextInt()%a.length;
        int l=x;
        int y=x;
        if(x==0){
            //没变
            System.out.println(Arrays.toString(a));
        }else {
            //a.length-x到a.length-1 + a[0]到a[a.length-x-1] 形成一个新数组
            for(int i=x;x>0;x--){
                b[i-x]=a[a.length-x];
            }
            for(int i=0;i<a.length-y;i++){
                b[l]=a[i];
                l++;
            }
            System.out.println(Arrays.toString(b));
        }
    }
}

leetcode通过:

class Solution {
    public void rotate(int[] a, int k) {

       //ps:如果这边int b[]=a; java机制直接把b的地址指向了a 当a因为底下代码发生改变的时候b也会改变 所以要重新new 一个地址给b
        int b[]=new int[a.length];
        for(int o=0;o<a.length;o++){
            b[o]=a[o];
        }
        int x=k%a.length;
        int l=x;
        int y=x;
        if(x==0){
            //没变
            a=a;
        }else {
            //a.length-x到a.length-1 + a[0]到a[a.length-x-1] 形成一个新数组
            for(int i=x;x>0;x--){
                a[i-x]=b[a.length-x];
            }
            for(int i=0;i<a.length-y;i++){
                a[l]=b[i];
                l++;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值