[컴퓨터 노트]자바 가 배열 에서 중복 되 는 숫자 를 찾 아 라.

5220 단어 Java
3.배열 에서 반복 되 는 숫자
제목 설명
길이 가 n 인 배열 의 모든 숫자 는 0 에서 n-1 의 범위 안에 있다.배열 의 일부 숫자 는 중복 되 지만 몇 개의 숫자 가 중복 되 는 지 모 르 고 모든 숫자 가 몇 번 반복 되 는 지 모른다.배열 에서 중복 되 는 숫자 를 찾 아 보 세 요.
Input:
{2, 3, 1, 0, 2, 5}

Output:
2

문제 풀이 의 사고 방향.
시간 복잡 도 O(N),공간 복잡 도 O(1)를 요구한다.따라서 정렬 방법 을 사용 할 수도 없고,추가 표기 그룹 을 사용 할 수도 없다.
이러한 배열 요소 가[0,n-1]범위 내 에 있 는 문제 에 대해 값 이 i 인 요 소 를 i 번 째 위치 로 조정 하여 해결 할 수 있다.이 문 제 는 중복 되 는 숫자 를 찾 아야 하기 때문에 조정 과정 에서 i 위치 에 i 값 이 있 는 요소 가 있 으 면 i 값 이 중복 되 는 것 을 알 수 있다.
(2,3,1,0,2,5)의 경우 위치 4 에 옮 겨 다 닐 때 이 위치 에 있 는 수 는 2 이지 만 두 번 째 위치 에 2 의 값 이 있 기 때문에 2 중복 을 알 수 있다.
public boolean duplicate(int[] nums, int length, int[] duplication) {
    if (nums == null || length <= 0)
        return false;
    for (int i = 0; i < length; i++) {
        while (nums[i] != i) {
            if (nums[i] == nums[nums[i]]) {
                duplication[0] = nums[i];
                return true;
            }
            swap(nums, i, nums[i]);
        }
    }
    return false;
}

private void swap(int[] nums, int i, int j) {
    int t = nums[i];
    nums[i] = nums[j];
    nums[j] = t;
}

좋은 웹페이지 즐겨찾기