2012-04-18 8 views
1

학교 숙제 문제를 연구 중입니다. 2 int[] 배열을 만들어야합니다. 첫 번째 배열 int[10]은 임의로 integers으로 채워집니다. 두 x 째 h 열은 첫 x ​​째 h 열과 동일한 x 호를 갖지만 중복 x 호는 없습니다.2 개 배열 만들기 - 첫 번째는 임의의 정수, 두 번째는 고유 한 임의의 정수를 나타냅니다.

예를 들어, 내 첫 번째 배열이 1,2,2,3,1,5,5,7,9,9이라고 가정합니다. 두 번째 배열은 1,2,3,5,7,9입니다.

누군가가이 문제를 해결할 수있는 올바른 방향을 제시해 주시겠습니까?

+3

숙제에 대한 질문은 숙제 태그를 항상 추가하십시오. –

+5

aaaand ... 지금까지 시도한 것은 무엇입니까 – Dan

답변

1

Set을 사용하는 것이 좋습니다.하지만 여기서는 세트를 사용하지 않고 수행하는 방법이 있습니다. 새 배열에 삽입하기 전에

public static boolean isNumberInArray(int[] array, int number) 
     { 
      for(int i=0; i<array.length; i++) 
      { 
       if(number == array[i]) 
        return true; 
      } 
      return false; 
     } 

지금이 기능을 사용 -

이 같은 기능을 가지고 : (!이 작동하지만이의 효율성에 대해 물어가 없습니다) . 그 부분을 알아 내려고합니다. 그것은 결국 숙제입니다!

+0

달콤한! 내 선생님이 찾고있는 것 같아요. 여기에서 가져 왔습니다. 고마워요! –

+0

내가 마지막에 얻은 솔루션을 어디에 게시합니까? –

2

나는 다음 (가 숙제라고 가정을하고 너무 복잡 아무것도해서는 안) 할 것 ...

  1. 정렬 java.util.Arrays.sort(myArray);를 사용하여 배열 -이 숫자를 주문하고 있는지 확인합니다 모든 반복되는 숫자는 서로 옆에있다.
  2. 루프 배열을 통해 고유 번호의 수를 유지 -
  3. 가에 두 번째 int[] 배열을 생성한다 (즉, 다음 번호로 현재의 수를 비교 서로 다른 경우 1 카운터를 증가) 올바른 크기 (포인트 2에서)
  4. 포인트 2와 동일한 프로세스를 반복하되 카운터를 증가시키지 말고 고유 한 숫자로 새 어레이를 채우십시오.

올바른 방향으로 움직이는 데 충분해야합니다. 몇 가지 코드가있을 때 질문이 여전히 있으면 우리에게 돌아와서 질문하십시오.

+0

우수한 덕분에! 코드를 가지고 다시 전화 할게! 감사합니다 :) –

+0

도와 줘서 기뻐요. 질문이 해결 된 경우 수락 된 대답을 '틱'하십시오. – wattostudios

4

Set에 숫자를 입력하십시오. 그런 다음 집합에서 숫자를 검색합니다. 단순한! 중복은 자동으로 제거됩니다!

+0

하지만 숙제가 너무 복잡할까요? 질문은 마치 포스터가 Java에 익숙하지 않고 배열에 대해 배우고있는 것처럼 보이게하므로 Set을 사용하는 것이 너무 기술적 일 수 있습니까? – wattostudios

+0

예, 가능합니다. 하지만 그는 세트 사용에 대한 보너스 포인트를 얻을 수있었습니다! : D – CodeBlue

+0

:-) 시도해 볼만한 가치가 있습니다 – wattostudios

0

힌트 (WATTO 더 잘 설명) :

a = sorted first array 
lastItem = a[0] 
append lastItem into new array 
for i in 1 to length(a): 
    if a[i] != lastItem: 
     append a[i] into new array 
     lastItem = a[i] 
0

@WATTO의 스튜디오는 좋은 방법이있다. 정렬은 복제가 관련된 경우 항상 유용합니다.

는 I 해시 테이블을 사용하는 다른 방법을 제시한다 :

  1. 키로서 정수 (원래의 배열 개수) 및 값으로 카운터 해싱 구조를 만든다.
  2. 원본 배열을 살펴보고 발생한 각 숫자에 대해 해시 테이블의 해당 카운터 값이 증가합니다.
  3. 원래 배열을 다시 살펴보십시오. 각 숫자에 대해 해시 테이블을 다시 확인하십시오. 관련 카운터가 1보다 큰 경우 값을 제거하고 카운터를 감소시킵니다.

의 실용적인 사례를 보자 :

4 5 6 4 1 1 3 

다음 표 작성합니다 첫 번째 패스 :

4 5 6 4 1 1 3 
^ 

4 has a counter of 2 -> remove and decrement: 

1 -> 2 
3 -> 1 
4 -> 1 
5 -> 1 
6 -> 1 

5 6 4 1 1 3 
^ 

5 has a counter of 1 -> ignore 
6 has a counter of 1 -> ignore 
4 has a counter of 1 -> ignore 
1 has a counter of 2 -> remove and decrement 

1 -> 1 
3 -> 1 
4 -> 1 
5 -> 1 
6 -> 1 

5 6 4 1 3 
    ^ 
1 has a counter of 1 -> ignore 
3 has a counter of 1 -> ignore 

최종 배열 : 단계별로

1 -> 2 
3 -> 1 
4 -> 2 
5 -> 1 
6 -> 1 

두 번째 패스 단계 :

5 6 4 1 3 

예를 들어 링크 된 목록에 항목을 삽입하는 것과 같이 제거를 처리하는 더 효율적인 방법이 있습니다 (배열을 사용하면 이동한다는 의미이므로). 내가 결정하게 할께. :)

편집 : 이보다 더 빠른 접근 방식, 하나의 통과를 요구 :

  1. 를 사용하여 위와 같은 해시 구조.
  2. 원래 배열을 살펴 봅니다. 각 항목에 대해 표를 확인하십시오. 연결된 카운터가 0이면 1로 증가시킵니다. 이미 1이면 항목을 제거하십시오.
관련 문제