50 펑 (X, N) https://leetcode-cn.com/problems/powx-n/
달성 POW ( X , N ) 즉, X의 n 번째 전력의 함수.
설명 :
-100.0 < X <100.0
N은 수치 범위 [-231 231--1]은 32 비트 정수이다.
해결 방법 :
직접 전송 라이브러리 함수,하지만 당연히 인터뷰한다.
폭력, 직접 기록 사이클 곱셈, O (N).
파티션 ** Y = X (N / 2). 두 부분 측이 계산 될 수있는 N 짝수 입술 = Y * (Y)이다. N이 홀수, 입술의 Y = X *의 *의 예이다. 이 계산에 X 1 또는 X ** ** 0을 갖는다. O의 시간 복잡도 (logN).
재귀
솔루션 클래스 : DEF의 MYPOW (자체, X : 부동, N- : INT) ->의 float : IF N-되지 않음 : 리턴 1. IF N- <0 : 리턴 1 / self.myPow (X, -n). N- % 2 IF : X를 반환 * self.myPow (X는 N-1 )의 # n이 홀수이고, n-1의 전원 수행하여 리턴 self.myPow를 (X *는 X가 N / 2) # n을 짝수 인
반복적 인 구현은, 최소 계산 된 파티션 승수 X이다. 예를 들어, X ** (7) = X * X ** (6) = (X) * (X ** 2) ** (3) = (X) * (X ** 2) * ((X ** 2) ** 2) ** 1
클래스 솔루션 : DEF의 MYPOW (자체, X : 부동, N : INT는) -> 부동 소수점은 하지 N 경우 : 리턴 1 , n은 <0 경우 : 적은 다음 0 이상이 N로 변환 #의 n은,보다 크다 0 년대 X는 1이된다 / X와 X = X / 1 N - N = RES = 1 그동안 N- : 파티션 1은 전력의 최소 단위이고 n은 1 경우 # n을 여분의 X에 의해 먼저 홀수 RES의 =의 X * * X = X 배율에서, x는 대략 2 × **된다 # N -. >> 1 = # n 형 층 (N- / 2) 복귀를 RES
169이 모드를 추구 https://leetcode-cn.com/problems/majority-element/
크기 감안할 때 n 개의 배열, 그들 모두 수를 찾을 수 있습니다. 모드 횟수가 어레이에 나타나는보다 큰 ⌊ n/2 ⌋
요소.
당신은 배열이 비어 있지 않은 것으로 가정 할 수 있으며, 회중의 지정된 배열 번호는 항상있다.
해결 방법 :
폭력 개의 중첩 루프는 내부에 하나 개의 어레이에 대한 모든 X, X 카운트 열거. O (N 2 )
직접 주문 후 중간 요소가 확실히 모드입니다 걸릴. O (NlogN)
급 솔루션 : DEF majorityElement (자기, nums리스트 [INT]) -> INT : nums.sort () N = LEN (nums) 복귀 nums [INT ((N-1) / 2)]
해시 맵의 요소 수를 유지하고, 마지막으로 계산 가장 큰 요소 봐 내부지도로 이동하여, 한 번 통과. O (N)
클래스 솔루션 : DEF majorityElement (자기의 nums : 목록 [INT]) -> INT : COUNT = DICT () 다음 nums의 X에 대한 COUNT에 X 경우 : . COUNT [X] + = 1 그렇지 않으면 : . [X] COUNT = 1
MAX_COUNT 0 = 키위한은 ()의 값을 count.items : 값> MAX_COUNT 경우 : MAX_COUNT 값 =에 RES = 키 바로 리턴 RES 번호 사전 또는 기능을 얻을 광고는 (카운트 키 = count.get을 최대 돌아올 수 )
나누고 모든 서브 문제 길이 1의 배열 될 때까지 재귀 적 해법을 정복. 송신 서브 어레이는 추가 시간과 공간을 필요로하므로 포인터 우리 주위 실제로 단지 하위 전송 간격 첨자 주위 그 대응 높고 낮은 영역을 나타내고 있기 때문이다.
고유 번호의 배열의 길이는 분명히 모드, 그것은 직접 반환 할 수 있습니다.
1보다 큰 섹션의 후면의 길이, 값을 합하여 서브 인터벌 해결되어야합니다. 그들은 모두 같은 번호 인 경우에, 명확하게이 기간의 모드는 같은 값의 간격입니다. 그렇지 않으면, 당신은 두 가지 모드 비교할 필요 의 전체 범위 의 간격을 결정하는 모드에서 발생 횟수를.
원래의 질문에 대한 답이 모드 인덱스는 0과 N 서브 문제 사이이다.
시간 복잡도는 O (NlogN)
솔루션 클래스 : DEF majorityElement (자기의 nums : 목록 [INT]) -> INT : 리턴 self.helper합니다 (nums, 0, 렌합니다 (nums) -1) DEF 도우미 (자기의 nums, 저, 고) = 낮은 IF = 높은 # 1은 서브 어레이의 길이, 즉, 모든 고유 한 소자의 수는 nums에 반품 [낮음] # 서브 어레이 길이가 약 모드 반복적 어레이 찾기 위해 1보다 큰 중간 = 로우 + (하이 - 로우 ) // 2 왼쪽 = self.helper합니다 (nums, 낮음, MID) 오른쪽 = self.helper합니다 (nums, MID + 1, 높음). == 좌우 경우 : 모드가 대략 동일한 경우, 왼쪽과 오른쪽 두 모드 사이의 관계를 분석 중 # 그것은 소수의 전체 수에 대해해야합니다 왼쪽 반환 하지 않으면 #을, 큰 하나가 대중의 전체 수를 전체 수를 left_count, right_count = 0, 0 범위의 난에 대한 (저, 고 + 1) : IF nums [I] = = 왼쪽 : left_count + = 1 ELIF의 nums [I] == 오른쪽 : right_count + = 1 명 복귀 경우 left_count> right_count 다른 좌우