旋转n次后在索引处查找元素

时间:2019-10-25 15:11:38

标签: algorithm math

这个问题来自hackerrank。 https://www.hackerrank.com/challenges/circular-array-rotation/problem

输入:

  1. 一个由n个数字组成的数组(int [])

  2. 转数(k)1> = k <= n

  3. 旋转数组索引大小为m的数组(int [])

输出: 具有旋转数组元素的m大小的数组(int [])

我已经解决了旋转问题,它将改变数组元素的位置。 我试图在不更改原始数组的情况下解决问题(通过数学方式处理旋转的数组索引)。这是我编写的方法,适用于我使用的用例,但在hackerrank上它显示1个测试失败。

private int[] withoutRotateArray(int[] input, int k, int[] checkIndex) {
        for (int i = 0; i < checkIndex.length; i++) {
            if(checkIndex[i] < k) {
                checkIndex[i] = input[input.length - (k - checkIndex[i])];
            } else {
                checkIndex[i] = input[Math.abs(k - (checkIndex[i]))];
            }
        }
        return checkIndex;
    }

有人可以帮助我了解我的方法有什么问题吗?

示例:

I / P数组[1,2,3,4,5]

转数:2

检查索引:[2,4]

O / P数组[1,3]

1 个答案:

答案 0 :(得分:-1)

在HackerRank上,您应注意不要更改作为参数获取的任何对象/数组(除非在挑战中要求这样做):通常,测试代码依赖于您的代码不执行此操作的假设。 / p>

因此,与其将结果存储在checkIndex中,不如为其创建一个新数组,然后将其返回。