hackerrank上的一道题——Sherlock and Watson

hackerrank上的一道题——Sherlock and Watson_第1张图片
hackerrank上的一道题——Sherlock and Watson_第2张图片
题目描述

个人觉得自己的想法很机智,首先使用 2N 长度的数组存储了数据,开始输入数据时存储位置为 N-2N-1,所以后续在做右移的时候只需将最后一位的数据放到 N 前面的位置即可,剩下的依此类推。对了,记得考虑当移位次数大于数据总数时特殊情况的考虑,取余即可。原始代码如下:

import java.util.Scanner;

/**
* Created by huliang on 16/7/23.
*/

public class Solution {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int N = scanner.nextInt();
            int K = scanner.nextInt();
            int Q = scanner.nextInt();

            // 获取数组数据
            int a[] = new int[2 * N];
            for (int i = 0; i < N; i++) {
                a[i] = '\0';
            }
            for (int i = N; i < 2 * N; i++) {
                a[i] = scanner.nextInt();
            }

            // 进行交换操作,注意当 K>N 时需进行取余操作
            for (int i = 1; i <= K%N; i++) {
                a[N - i] = a[2 * N - i];
                a[2 * N - i] = '\0';
            }
        
            // 输出需要的值
            for (int i = 0; i < Q; i++) {
                System.out.println(a[N - K%N + scanner.nextInt()]);
            }

        }
    }
}

你可能感兴趣的:(hackerrank上的一道题——Sherlock and Watson)