189. 旋转数组

2019-12-30  本文已影响0人  Andysys
    // 使用环状替换
    public void rotate(int[] nums, int k) {
        final int length = nums.length;
        k = k % length;
        int count = 0;
        int current, prev, next, temp;
        for (int start = 0; count < length; start++) {
            current = start;
            prev = nums[start];
            do {
                next = (current + k) % length;
                temp = nums[next];
                nums[next] = prev;
                prev = temp;
                current = next;
                count++;
            } while (start != current);
        }
    }

    // 使用反转
    public void rotate2(int[] nums, int k) {
        final int length = nums.length;
        k %= length;
        reverse(nums, 0, length - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, length - 1);
    }

    private void reverse(int[] nums, int start, int end) {
        int temp;
        while (start < end) {
            temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读