다음은 Java 배열 번호의 수를 소개하는 몇 가지 방법입니다. 특정 내용은 다음과 같습니다.
방법 1 : 방법 1
배열 정렬 및 중간 값은 확실히 찾을 수있는 값입니다. 최소 시간 복잡성 (빠른 정렬) O (Nlogn)와 Traversal을 정렬하십시오.
방법 2 : 방법 2.
해시 테이블 방법을 사용하여, 즉, 각 배열의 발생 수와 배열 길이보다 큰 출력 숫자를 계산합니다.
메소드 3 :
발생 횟수는 배열 길이의 절반을 초과 하여이 숫자가 다른 숫자의 합보다 더 많은 시간이 나타납니다.
매번 두 개의 다른 숫자를 삭제하는 것을 고려하면 나머지 숫자의 발생 횟수는 여전히 총 숫자를 초과합니다. 프로세스를 지속적으로 반복하고 다른 숫자를 제외하고 마지막으로 발생의 절반 이상이있는 숫자를 찾으십시오. 이 방법의 시간 복잡성은 O (n)이고 공간 복잡성은 O (1)입니다.
아이디어를 바꾸려면 실제 물리적 결실보다는 계산을 통해이를 달성 할 수 있습니다. 배열을 가로 지르는 과정에서 두 값을 저장하십시오. 하나는 배열의 숫자이고 다른 하나는 발생 수입니다. 다음 숫자로 이동하는 경우,이 숫자가 이전에 저장된 숫자와 동일하다면, 횟수는 1 씩 증가하고, 다른 경우 횟수가 1 씩 감소합니다. 횟수가 0이면 다음 숫자를 저장하고 숫자를 1로 설정합니다. 찾은 숫자는 다른 시간에 해당하는 숫자가 1 번에 설정되어 있어야합니다.
public int morehalf (int [] nums) {int result = 0; int count = 1; if (nums.length == 0) return -1; result = nums [0]; for (int i = 1; i <nums.length; i ++) {if (count == 0) {result = nums [i]; count = 1; 계속;} count+; 결과;}Method 4:
앞에서 언급 한 향상된 퀵 랑 분류는 배열이 정렬되면 중간 위치의 숫자가 원하는 값이어야합니다. 분류 배열의 시간 복잡성은 O (nlog (n))이지만이 질문의 경우 시간 복잡성 O (n) 내에 찾을 수있는 더 나은 알고리즘이 있습니다.
빠른 정렬 알고리즘에서 파생 된 파티션 () 메소드가 가장 중요한 메소드입니다. 이 메소드는 인덱스를 반환하여 인덱스 위치의 숫자를 정렬 할 수 있습니다. 인덱스 왼쪽의 숫자는 인덱스가있는 숫자보다 작고 인덱스 오른쪽의 숫자는 인덱스가있는 숫자보다 큽니다. 이 아이디어를 사용 하여이 질문을 해결할 수 있습니다.
파티션 ()을 통해 반환 인덱스. 색인 == 중간 인 경우 배열의 중앙값이 발견되었음을 의미합니다. indexMID 인 경우 중앙값이 [시작, 인덱스 -1] 사이에 있음을 의미합니다. INDEX == MID 루프의 끝이 얻어진다는 것을 알고 있습니다.
public int partition (int [] nums, int start, int end) {int pivotkey = nums [start]; int origin = start; whip (start <end) {while (start <end && nums [end]> = pivotkey) end-; 스왑 (nums, start, end); swap (nums, origin, end); return end;} p int [] swap (int [] ints, int x, int y) {int temp = ints [x]; int [x] = ints [y]; ints [y] = 온도; ints 리턴; } public int morethanhalf (int [] nums) {if (nums.length == 0) return -1; int start = 0; int start = 0; int end = nums.length-1; int index = partition (nums, start, end); int mid = nums.length/2; where (index! = mid) {If (index> mid) // 인덱스가 더 큰 경우, artay indean이 계속 조정하는 경우 (인덱스! = mid) // 파티션 (nums, start, index-1); else {// index+1의 배열 인덱스를 끝까지 조정하십시오.위의 내용은 배열에서 시간의 절반 이상이 표시되는 숫자를 구현하는 Java 코드의 관련 내용을 소개합니다. 나는 그것이 모두에게 도움이되기를 바랍니다!