2013-12-19 6 views
1

해결하려고하는 문제는 다음과 같습니다. -배열에서 두 요소를 어떻게 바꿀 수 있습니까?

int 길이가 3 인 배열이 주어진다면, {1, 2, 3}은 {2, 3,

public int[] rotateLeft3(int[] nums) { 
    for(int i=0;i<2;i++) 
    swap(nums[i],nums[i+1]); 
    return nums; 
} 

public void swap(int a,int b) 
{ 
int temp = a; 
a = b; 
b= temp; 
} 

그러나, 그것은 성공적으로 실행되고 있지 않습니다 - : 1}

다음 코드를 내놓았다. C++의 경우 인수를 인수로 전달할 수 있었고 문제가 정렬 된 이유는 무엇입니까?

다음 코드는 작동 : -

public int[] rotateLeft3(int[] nums) { 
    int temp = nums[0]; 
    nums[0] = nums[1]; 
    nums[1] = temp; 
    temp = nums[1]; 
    nums[1] = nums[2]; 
    nums[2] = temp; 
    return nums; 
} 

하지만이 코드는 완전한 무차별 쓰기이고 나는 그것을 매우 좋아하고 있지 않다. 첫 번째 접근법을 어떻게 만들 수 있는지 제안 해 주시겠습니까?

답변

3

, 시도 :

public int[] rotateLeft(int[] nums){ 
    if(nums.length == 0) 
    return new int[0]; 

    int temp = nums[0]; 
    //This loop starts at index 1 because we are moving 
    // elements left, and 0 can't move left. 
    for(int index = 1; index < nums.length; index++){ 
    nums[index-1] = nums[index]; 
    } 

    nums[nums.length-1] = temp; 
} 
+0

삽입 정렬에 사용 된 것과 동일한 논리 (요소 이동)입니다. 나는 이것도 사용할 수 있었다. – kusur

6

Java 메소드 호출의 모든 매개 변수는 값으로 전달됩니다. 배열과 스왑하려는 두 개의 인덱스를 전달해야합니다.

public void swap(int[] array, int a,int b) 
{ 
int temp = array[a]; 
array[a] = array[b]; 
array[b]= temp; 
} 
4

문제가 참조로 전달되었다고 했으므로 C는 Java를 지원하지 않습니다. 동일한 목적을 달성하기위한 다른 많은 방법이 있습니다.

가장 간단한 방법은 배열과 두 인덱스를 해당 인덱스의 배열 내용 대신 스왑 함수에 전달하는 것입니다. 당신이 크기에 의해 제한되지 않는다 회전을하려면

3

당신은 또한 temp 변수없이 XOR 스왑을 사용할 수 있습니다)

public void swap(int[] array, int ind1, int ind2) { 
array[ind1] ^= array[ind2] 
array[ind1] ^= (array[ind2] ^= array[ind1]) 
} 
2

당신이 호출 할 때 swap 메서드를 사용하면 배열 내부의 값을 전달하지만 해당 메서드는 a 및 b 값을 반환하지 않습니다. 예, 포인터를 사용하여 C/C++에서 수행 할 수 있지만 java에는 없습니다.

Xynariz의 코드는 배열 크기에 국한되지 않는 이동을 수행하는 방법을 제공합니다.

0

당신은 단 한 줄의 사용 패턴과 스왑 기능을 만들 수 있지만 호출 형식은 전형적인되지 않습니다 :

할당이의 나머지 부분에서 발생하기 전에 첫 번째 인수가 스왑에 전달되기 때문에이 작동
public int[] rotateLeft3(int[] nums) { 
    for(int i=0;i<2;i++) 
    nums[i+1] = swap(nums[i], nums[i]=nums[i+1]); 
    return nums; 
} 

// swaps any number of same type objects 
public <T> T swap(T... args) { 
    // usage: z = swap(a, a=b, b=c, ... y=z); 
    return args[0]; 
} 

인수.

관련 문제