2017-04-13 1 views
0

저는 자바에서 기본 배열 문제를 연습하고 있습니다. 왼쪽/오른쪽 k 단위로 n 요소를 회전하는 문제가있었습니다. 나는 100 개 이상의 요소를 가지고있는 경우이 후Java 역 배열 방법은 어떻게 작동합니까?

return new int[]{arr[1],arr[2],arr[0]}; 

:

나는 작은 요소 배열을 처리하기 위해 내가 배열 int[]arr={1,2,3};이 같은 난 그냥이 같은 요소의 위치를 ​​전환 할 수 있습니다 방법을 알고 이 방법은 전혀 작동하지 않습니다. 그래서 나는 누군가가 그것을 다루기 위해 역 방법을 사용하는 것을 보았다.

public void rotateProblem(int[]arr,int k){ //k means rotate k units to right 
    k%=arr.length; 
    k=2; 
    reverse(arr, 0, arr.length - 1); 
    reverse(arr, 0, k - 1); 
    reverse(arr, k, arr.length - 1); 
} 

그러나 나는 모든이 방법은 배열을 반대로 않습니다 어떻게 그것을 얻을하지 않습니다, 그리고 왜 사람이 반대 방법을 나에게 설명 할 수 k%=arr.length;를 사용할 필요합니까?

+0

'reverse'메소드를 게시하십시오. 자바가 내장되어 있지 않습니다. –

+0

'k % = arr.length;'는'k = 2; '를 가지고 있기 때문에 아무 것도하지 않습니다. 그러나 이것은 k의 큰 값을 처리 할 것으로 기대합니다. –

답변

0

는,이 문제가 K만큼 오른쪽으로 어레이의 각 요소를 회전 leetcode

에서 게시 어레이 [1,2,3,4,5,6,7]k = 3, 예를 들면
단계, [5,6,7,1,2,3,4]으로 회전된다.

참고 : 배열의 요소 수보다 큰 k이있을 수 있습니다.
따라서 k = array.length으로 회전 된 배열은 원래 배열과 같습니다.
마찬가지로 k = array.length + 1k = 1과 같습니다.

따라서 불필요한 다중 회전을 방지하기 위해 첫 번째 경우에 k = k % arr.length을 수행합니다. 당신이 배열의 첫 번째 부분을 달성시피


reverse(arr, 0, arr.length - 1);[5,6,7, 4,3,2,1]
의 배열을 야기한다 [7,6,5,4,3,2,1]
reverse(arr, 0, k - 1);의 배열을 야기 할 것이다.
reverse(arr, k, arr.length - 1);은 배열의 마지막 부분을 달성하는 데 도움이됩니다. [5,6,7, 1,2,3,4]

전반적으로, (회전 된) 배열은 [5,6,7,1,2,3,4]이 될 것이다.


달성 방법에는 여러 가지가 있습니다.

reverseArray(nums, len - k, len - 1); // [1,2,3,4,7,6,5] 
reverseArray(nums, 0, len - k - 1); // [4,3,2,1,7,6,5] 
reverseArray(nums, 0, len - 1);  // [5,6,7,1,2,3,4] 

len = arr.length 또 다른 방법입니다 말해봐.

+0

고맙습니다.하지만 reverse() 메서드에 대한 질문이 여전히 있습니다. 왜이 메서드에 (arr, 0, arr.length-1)을 쓰나요? –

+0

오른쪽으로 회전해야합니다. 배열의 대칭 이미지를 취하는 것으로 간주하십시오. 오른쪽의 요소는 자동으로 왼쪽으로 향하고 그 반대의 경우도 마찬가지입니다. –

1

하지만이 방법이 배열을 어떻게 반전 시키나요?

이것은 라이브러리 구현이 아닙니다. 혼자서 작성해야합니다. This 도움이 될 수 있습니다.

왜 k % = arr.length;를 사용해야합니까?

100 개 요소의 배열이 있고 550 개 위치로 회전해야하는 경우 결과 배열은 50 개 요소만큼 회전 한 것과 유사합니다. 100 개의 위치 또는 200 개의 위치 또는 일반적으로 k * 100 위치로 회전하여 동일한 배열을 얻습니다. I 가정

관련 문제