2014-10-10 3 views
0

배열에서 어떤 요소가 동일한 지 확인한 다음 동일한 요소를 반환하려고합니다. 나는 for 루프를 for 루프 안에서 수행해야한다고 생각하지만 확실하지는 않습니다. 내가 배열을 생성하는 방법배열에서 어떤 요소가 같은지 확인

for (int p = 0 ; p < temperatures.length ; p++) { 
    for (int j = 0 ; j < temperatures.length ; j++) { 
     if (temperatures[p] == temperatures[j]) { 
      System.out.println("matching" + j + p); 
     } 
    } 
} 

:

for(int i = 0; i < temperatures.length; i++) { 
    System.out.println("Please enter the temperature in Celcius for day " + (i+1)); 
    temperatures[i] = new Data(input.nextDouble()); 
} 
+1

발생하는 문제점은 무엇입니까? –

+0

온도가 두 배 또는 부동 소수 일 경우 어쩌면 델타를 사용하여 서로 비교해야합니다 – Leo

+0

숙제입니까? 그렇지 않은 경우 [이] (http://stackoverflow.com/questions/14260134/elegant-way-of-counting-occurrences-in-a-java-collection) 질문을 참조하십시오. –

답변

0

는 7 경기를 말한다 이유는 때문에

for(int j = 0; j < temperatures.length; j++) 
      { 
       if(temperatures[p] == temperatures[j]) // This will have te..[0]==te..[0] .... te..[1]==te..[1] .... te..[6]==te..[6] 

에 당신은 그것을 변경해야 이것은 내가 지금까지 무엇을 가지고

+0

나는 당신이 제안한 것을했는데, 나는 온도를 모두 똑같이 퍼팅 할 때 0과 일치하는 것을 얻고 있습니까?> – destroted

+0

코드 int j = i + 1; ~ int j = p + 1; p는 첫 번째 for 루프에서 선언하는 변수이므로 Eclipse에서이 코드를 실행하면 올바른 결과가 나옵니다. – user562

0

또 다른 접근법은 처음으로 ort 배열 (숫자 또는 정렬 할 수있는 한). 그런 다음 중복을 확인하는 것은 간단합니다. QuickSort 또는 TimSort으로 정렬

O(n log n) 평균, 당신은 O(n)에서 중복을 알 수 있습니다. 원본을 수정할 수 없다면 여분의 O(n)이 필요합니다 (복사하는 경우).

Arrays.sort(double[])O(n log n)입니다.

이 알고리즘은 O(2n log n)이고 O(n log n) = O(log n!)입니다.

임의의 int가있는 간단한 예입니다.

 int[] d = ThreadLocalRandom.current().ints(100, 0, 100).toArray(); 
    Arrays.sort(d); // O(n log n) 

    boolean dup = false; 
    for (int i = 1; i < d.length; i++) { // O(n) 
     if (d[i - 1] == d[i]) { 
      dup = true; 
     } else { 
      if (dup) { 
       System.out.print(d[i - 1] + " "); 
      } 
      dup = false; 
     } 
    } 
    System.out.println(""); 

    for (int i = 0; i < d.length; i++) { 
     System.out.print(d[i] + " "); 
    } 
관련 문제