Lesson 2 Arrays Question 2 CyclicRotation

源地址

https://app.codility.com/programmers/lessons/2-arrays/cyclic_rotation/

CyclicRotation(周期旋转)

给定一个包含N个整数的数组A。数组的旋转的意思是每一个元素往右移动一格,并且最后一个元素被移动到第一个。比如,数组A「3,8,9,7,6」的旋转是「6,3,8,9,7」(元素往右移动一格,并且6被移动到第一个。)
目标是旋转k次数组A,也就是A中的每个元素都会被移动k次。
写一个函数:

	class Solution { 
		public int[] solution(int[] A, int K); 
	}

给定一个包含N个整数的数组A和一个整数K,返回旋转了K次的数组A。
比如,给定

  A = [ 3 , 8 , 9 , 7 , 6 ]
  K = 3

这个函数应该返还 [ 9 , 7 , 6 , 3 , 8 ] 。做了3次旋转

  [3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7]
  [6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9]
  [7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8]

另一个例子,给定

  A = [ 0 , 0 , 0 ]
  K = 1

这个函数返回 [ 0 , 0 , 0 ]

给定

  A = [  1 , 2 , 3 , 4 ]
  K = 4

这个函数返回 [ 0 , 0 , 0 ]

假设:

  • N和K是在[ 0 , 100 ]范围内的整数
  • 数组A中的每个元素都是在[ -1000 , 1000 ]范围内的整数

在你的解决方案中,应该聚焦于正确性,而不是效率。

第一步

其实是一个取模的问题。当k等于数组长度的时候,每个数字都会移动回其原来的位置。当不等的时候,移动的位置就是k对数组长度取余。

 public int[] solution(int[] A, int K) {
        
        int len = A.length;
        if (len < 2 || K % len == 0) {
            return A;
        }
        int[] result = new int[len];
        int distance = K % len;
        for (int i = 0; i < len; i++) {
            result[(i + distance) % len] = A[i];
        }
        return result;
    
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值