#️⃣ 배열, 우선순위 대기열, 빠른 선택
https://leetcode.com/problems/kth-largest-element-in-an-array/description
? 문제 이해
배열이 [8, 6, 12, 9, 3, 4]이고 k가 2인 경우 이 배열에서 두 번째로 큰 요소를 찾아야 합니다. 먼저 배열을 정렬합니다: [3, 4, 6, 8, 9, 12] 두 번째로 큰 요소이므로 출력은 9가 됩니다.
✅ 무차별 대입
var findKthLargest = function(nums, k) { // Sort the array in ascending order nums.sort((a, b) => a - b); // Return the kth largest element return nums[nums.length - k]; };
설명:
- 배열 정렬: 정렬 방법을 사용하여 배열을 오름차순으로 정렬합니다.
- k번째로 큰 요소 찾기: k번째로 큰 요소는 인덱스 nums.length - k의 요소에 액세스하여 찾습니다.
시간 복잡도:
- 정렬: 배열 정렬의 시간 복잡도는 (O(nlog n))입니다. 여기서 (n)은 배열의 길이입니다.
- 요소 액세스: 배열의 요소에 액세스하는 것은 O(1)입니다.
그러므로 전체 시간 복잡도는 O(n log n)입니다.
공간 복잡도:
- 내부 정렬: 정렬 방법은 배열을 제자리에서 정렬하므로 정렬 작업의 공간 복잡도는 O(1)입니다.
- 전체: 추가 데이터 구조를 사용하지 않으므로 전체 공간 복잡도는 O(1)입니다.
✅ 더 좋음
var findKthLargest = function(nums, k) { // Create a min-heap using a priority queue let minHeap = new MinPriorityQueue(); // Add the first k elements to the heap for (let i = 0; i <h4> 설명: </h4> <ol> <li> <strong>초기 배열</strong>: [2, 1, 6, 3, 5, 4] </li> <li> <strong>k = 3</strong>: 세 번째로 큰 요소를 찾아야 합니다.</li> </ol> <h4> 1단계: 최소 힙에 처음 k개 요소 추가 </h4>
- 2를 추가한 후의 힙: [2]
- 1을 추가한 후의 힙: [1, 2]
- 6을 추가한 후의 힙: [1, 2, 6]
2단계: 나머지 요소 반복
-
현재 요소 = 3
- 비교 전 힙: [1, 2, 6]
- 힙에서 가장 작은 요소(minHeap.front().element): 1
- 비교: 3 > 1
- Action: 1을 제거하고 3을 추가
- 업데이트 후 힙: [2, 6, 3]
-
현재 요소 = 5
- 비교 전 힙: [2, 6, 3]
- 힙에서 가장 작은 요소(minHeap.front().element): 2
- 비교: 5 > 2
- Action: 2를 제거하고 5를 추가
- 업데이트 후 힙: [3, 6, 5]
-
현재 요소 = 4
- 비교 전 힙: [3, 6, 5]
- 힙에서 가장 작은 요소(minHeap.front().element): 3
- 비교: 4 > 3
- Action: 3개 제거 및 4개 추가
- 업데이트 후 힙: [4, 6, 5]
마지막 단계: 힙의 루트 반환
- 힙: [4, 6, 5]
- 세 번째로 큰 요소: 4(힙의 루트)
시간 복잡도:
- 힙 작업: 힙에서 요소를 삽입하고 제거하는 데는 O(log k) 시간이 걸립니다.
- 전체: 배열의 n개 요소 각각에 대해 이러한 작업을 수행하므로 전체 시간 복잡도는 O(n log k)입니다.
공간 복잡도:
- 힙 저장소: 힙은 최대 k개의 요소를 저장하므로 공간 복잡도는 O(k)입니다.
✅ 최고
참고: Leetcode가 빠른 선택을 제한하더라도 이 접근 방식은 대부분의 테스트 사례를 통과하므로 기억해야 합니다
//Quick Select Algo function quickSelect(list, left, right, k) if left = right return list[left] Select a pivotIndex between left and right pivotIndex := partition(list, left, right, pivotIndex) if k = pivotIndex return list[k] else if k <pre class="brush:php;toolbar:false">var findKthLargest = function(nums, k) { // Call the quickSelect function to find the kth largest element return quickSelect(nums, 0, nums.length - 1, nums.length - k); }; function quickSelect(nums, low, high, index) { // If the low and high pointers are the same, return the element at low if (low === high) return nums[low]; // Partition the array and get the pivot index let pivotIndex = partition(nums, low, high); // If the pivot index is the target index, return the element at pivot index if (pivotIndex === index) { return nums[pivotIndex]; } else if (pivotIndex > index) { // If the pivot index is greater than the target index, search in the left partition return quickSelect(nums, low, pivotIndex - 1, index); } else { // If the pivot index is less than the target index, search in the right partition return quickSelect(nums, pivotIndex + 1, high, index); } } function partition(nums, low, high) { // Choose the pivot element let pivot = nums[high]; let pointer = low; // Rearrange the elements based on the pivot for (let i = low; i <h4> Explanation: </h4> <ol> <li> <strong>Initial Array</strong>: [3, 2, 1, 5, 6, 4] </li> <li> <strong>k = 2</strong>: We need to find the 2nd largest element.</li> </ol> <h4> Step 1: Partition the array </h4>
- Pivot element = 4
- Array after partitioning: [3, 2, 1, 4, 6, 5]
- Pivot index = 3
Step 2: Recursive Selection
- Target index = 4 (since we need the 2nd largest element, which is the 4th index in 0-based indexing)
- Pivot index (3) : Search in the right partition [6, 5]
Step 3: Partition the right partition
- Pivot element = 5
- Array after partitioning: [3, 2, 1, 4, 5, 6]
- Pivot index = 4
Final Step: Return the element at the target index
- Element at index 4: 5
Time Complexity:
- Average Case: The average time complexity of Quickselect is O(n).
- Worst Case: The worst-case time complexity is O(n^2), but this is rare with good pivot selection.
Space Complexity:
- In-Place: The space complexity is O(1) because the algorithm works in place.
위 내용은 배열에서 K번째로 큰 요소의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript 문자열 교체 방법 및 FAQ에 대한 자세한 설명 이 기사는 JavaScript에서 문자열 문자를 대체하는 두 가지 방법 인 내부 JavaScript 코드와 웹 페이지의 내부 HTML을 탐색합니다. JavaScript 코드 내부의 문자열을 교체하십시오 가장 직접적인 방법은 대체 () 메소드를 사용하는 것입니다. str = str.replace ( "find", "replace"); 이 메소드는 첫 번째 일치 만 대체합니다. 모든 경기를 교체하려면 정규 표현식을 사용하고 전역 플래그 g를 추가하십시오. str = str.replace (/fi

간단한 자바 스크립트 함수는 날짜가 유효한지 확인하는 데 사용됩니다. 기능 isValidDate (s) { var 비트 = s.split ( '/'); var d = 새로운 날짜 (비트 [2]/'비트 [1]/'비트 [0]); return !! (d && (d.getmonth () 1) == 비트 [1] && d.getDate () == 숫자 (비트 [0]); } //시험 var

이 기사에서는 jQuery를 사용하여 DOM 요소의 내부 마진 및 마진 값, 특히 요소의 외부 마진 및 내부 마진의 특정 위치를 얻고 설정하는 방법에 대해 설명합니다. CSS를 사용하여 요소의 내부 및 외부 마진을 설정할 수는 있지만 정확한 값을 얻는 것이 까다로울 수 있습니다. // 설정 $ ( "div.header"). css ( "margin", "10px"); $ ( "Div.Header"). CSS ( "패딩", "10px"); 이 코드는 생각할 수 있습니다

이 기사는 10 개의 탁월한 jQuery 탭과 아코디언을 탐구합니다. 탭과 아코디언의 주요 차이점은 콘텐츠 패널이 표시되고 숨겨진 방식에 있습니다. 이 10 가지 예를 살펴 보겠습니다. 관련 기사 : 10 JQuery Tab 플러그인

웹 사이트의 역학 및 시각적 매력을 높이기 위해 10 개의 탁월한 jQuery 플러그인을 발견하십시오! 이 선별 된 컬렉션은 이미지 애니메이션에서 대화식 갤러리에 이르기까지 다양한 기능을 제공합니다. 이 강력한 도구를 탐색합시다. 관련 게시물 : 1

HTTP-Console은 HTTP 명령을 실행하기위한 명령 줄 인터페이스를 제공하는 노드 모듈입니다. 웹 서버, 웹 서비스에 대해 만들어 졌는지 여부에 관계없이 HTTP 요청과 함께 어떻게 진행되고 있는지 정확하게 보는 데 유용합니다.

이 튜토리얼은 사용자 정의 Google 검색 API를 블로그 또는 웹 사이트에 통합하는 방법을 보여 주며 표준 WordPress 테마 검색 기능보다보다 세련된 검색 경험을 제공합니다. 놀랍게도 쉽습니다! 검색을 Y로 제한 할 수 있습니다

다음 jQuery 코드 스 니펫은 DIV 내용이 컨테이너 요소 영역을 초과 할 때 스크롤 바를 추가하는 데 사용될 수 있습니다. (데모 없음, FireBug에 직접 복사하십시오) // d = 문서 // w = 창 // $ = jQuery var contentArea = $ (this), wintop = contentArea.scrolltop (), docheight = $ (d) .height (), winheight = $ (w) .height (), divheight = $ ( '#c


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
