C 언어 배열 에서 중복 되 는 디지털 분석 및 방법

C 언어 배열 에서 반복 되 는 숫자 해결 방법:
제목:n 길이 의 배열 에 있 는 모든 숫자 는 0-n-1 범위 내 에 있 습 니 다.배열 의 일부 숫자 는 중복 되 지만 몇 개의 숫자 가 중복 되 었 는 지 모 르 고 모든 숫자 가 몇 번 반복 되 었 는 지 모른다.배열 에서 중복 되 는 숫자 를 찾 아 보 세 요.예 를 들 어 길이 가 7 인 배열{2,3,1,0,2,5,3}을 입력 하면 해당 하 는 출력 은 중복 되 는 숫자 2 또는 3 입 니 다.
해법 1:배열 을 정렬 한 후에 정렬 된 배열 을 옮 겨 다 니 면 배열 에서 중복 되 는 숫자 를 알 수 있 습 니 다.
시간 복잡 도;O(nlogn);
해법 2:O(N)크기 의 해시 표를 만 들 고 배열 의 요 소 를 옮 겨 다 니 며 해시 표 에 존재 하 는 지 판단 합 니 다.해시 표 에 존재 하지 않 는 다 면 이 요 소 를 해시 표 에 넣 고 계속 스 캔 합 니 다.이 요소 가 해시 표 에 존재 한다 면 배열 에서 중복 되 는 숫자 를 찾 았 습 니 다.
시간 복잡 도:O(N),공간 복잡 도:O(N);
해법 3:주어진 배열 을 정렬 합 니 다.다음 에 i 로 표 시 된 요소:a[i]=i 라면 다음 요 소 를 검색 합 니 다.만약 에 똑 같 지 않 으 면 a[i]와 a[a]를 비교 하고 똑 같 으 면 중복 되 는 숫자 를 찾 았 습 니 다.없 으 면 숫자 를 교환 하고 순서대로 진행 합 니 다.

int DuplicateInArray(int arr[],int size) 
{ 
  int i=0; 
  while(i<size) 
  { 
    if(arr[i] == i) 
      ++i; 
    else 
    { 
      if(arr[i] != arr[arr[i]]) 
      {swap(arr[i],arr[arr[i]]);} 
      else 
      {return arr[i];} 
    } 
  } 
  return -1; 
} 

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기