길이 가 M 인 무질서 한 배열 에서 N 개의 가장 큰 수 를 찾 아 라.

1107 단어 알고리즘
1. 배열 앞의 N 개 수 를 최소 로 조정 합 니 다.
2. 쌓 아 올 리 는 요소 의 수 치 는 N 번 째 요소 이후 의 모든 요소 와 순서대로 비교 합 니 다.
3. 쌓 인 요소 의 값 이 작 으 면 쌓 인 요 소 를 새로운 요소 의 값 으로 다시 할당 하고 앞의 N 개 수 를 최소 로 재 조정 합 니 다.그렇지 않 으 면 다음 요 소 를 판단 합 니 다.
4. 원 배열 의 마지막 요 소 를 옮 겨 다 닐 때 까지 최소 로 쌓 인 요 소 는 원 하 는 배열 의 N 개의 최대 수 입 니 다.
복잡 도 O (M * log (N))
python 코드:
# -*- coding: utf-8 -*-
'''
   
'''

#        
def filter_down(array, beg, end):
    current, child = beg, 2*beg + 1
    temp = array[current]

    while child <= end:
        if child < end and array[child] > array[child + 1]:
            child += 1

        if array[child] < temp:
            array[current] = array[child]
            current, child = child, 2*child + 1
        else:
            break

    array[current] = temp

def find_N_max(array, N):
    res = array[:N]
    for i in range(int((N - 2)/2), -1, -1):
        filter_down(res, i, N - 1)

    for j in range(N, len(array) - 1):
        if array[j] > res[0]:
            res[0] = array[j]
            filter_down(res, 0, N - 1)

    return res

좋은 웹페이지 즐겨찾기