当前位置:网站首页>Leetcode heap correlation
Leetcode heap correlation
2022-07-05 06:13:00 【Dawnlighttt】
List of articles
q215 The... In the array k The biggest element
Answer key
Although the title requires that the number in the array be returned k The biggest element , But what I build is a small root pile , Because when building a small root heap , Assigning values to the result array starts from large to small , That is, assign values from the end of the array . So when the last sorting operation is traversed , When len(nums) - i == k when , Go straight back to nums[i] that will do .
func findKthLargest(nums []int, k int) int {
// Building the heap
for i := len(nums) / 2 - 1; i >= 0; i-- {
heapify(nums, len(nums), i)
}
for i := len(nums) - 1; i > 0; i-- {
nums[i], nums[0] = nums[0], nums[i]
heapify(nums, i, 0)
if len(nums) - i == k {
return nums[i]
}
}
return nums[0]
}
func heapify(arr []int, n int, i int) {
// Heap maintenance
largest := i //i Is the subscript of the current parent node
lson := i * 2 + 1 // Left the child
rson := i * 2 + 2 // The right child
// Save the subscript of the maximum value
if lson < n && arr[largest] < arr[lson] {
largest = lson
}
if rson < n && arr[largest] < arr[rson] {
largest = rson
}
if largest != i {
arr[largest], arr[i] = arr[i], arr[largest]
// Recursively maintain the heap to the child node
heapify(arr, n, largest)
}
}
q347 front k High frequency elements
Answer key
First, use one hash Table to record the number of times each number appears , Then open a two-dimensional array ,count[i][0] Used to store the elements of a given array ,count[i][1] Used to store the number of occurrences of a given array element . Then use heap sorting , Sort the elements according to the number of occurrences , According to count[i][1] To build a small root pile , In order to count Array to sort . And then count[i][0] Deposit in res in , Finally, when len(nums) - i == k when , return res that will do . The practice is similar to the previous question .
func topKFrequent(nums []int, k int) []int {
hashTable := make(map[int]int)
for _, v := range nums {
hashTable[v]++
}
var count [][]int
for k, v := range hashTable {
count = append(count, []int{
k, v})
}
res := make([]int, 0)
// Building the heap
for i := len(count) / 2 - 1; i >= 0; i-- {
heapify(count, len(count), i)
}
for i := len(count) - 1; i >= 0; i-- {
count[i], count[0] = count[0], count[i]
heapify(count, i, 0)
res = append(res, count[i][0])
if len(count) - i == k {
break
}
}
return res
}
func heapify(arr [][]int, n int, i int) {
// Heap maintenance
largest := i //i Is the subscript of the current parent node
lson := i * 2 + 1 // Left the child
rson := i * 2 + 2 // The right child
// Save the subscript of the maximum value
if lson < n && arr[largest][1] < arr[lson][1] {
largest = lson
}
if rson < n && arr[largest][1] < arr[rson][1] {
largest = rson
}
if largest != i {
arr[largest], arr[i] = arr[i], arr[largest]
// Recursively maintain the heap to the child node
heapify(arr, n, largest)
}
}
边栏推荐
- CPU内核和逻辑处理器的区别
- Convolution neural network -- convolution layer
- Simple knapsack, queue and stack with deque
- Typical use cases for knapsacks, queues, and stacks
- Basic explanation of typescript
- Daily question 2006 Number of pairs whose absolute value of difference is k
- leetcode-1200:最小绝对差
- Leetcode-31: next spread
- Time of process
- Control unit
猜你喜欢

Leetcode-6108: decrypt messages

1.13 - RISC/CISC

LeetCode 0108.将有序数组转换为二叉搜索树 - 数组中值为根,中值左右分别为左右子树

Personal developed penetration testing tool Satania v1.2 update

RGB LED infinite mirror controlled by Arduino

快速使用Amazon MemoryDB并构建你专属的Redis内存数据库

Redis publish subscribe command line implementation

redis发布订阅命令行实现

LVS简介【暂未完成(半成品)】

API related to TCP connection
随机推荐
Redis publish subscribe command line implementation
【Rust 笔记】15-字符串与文本(下)
Matrixdb V4.5.0 was launched with a new mars2 storage engine!
LeetCode 0107. Sequence traversal of binary tree II - another method
leetcode-9:回文数
做 SQL 性能优化真是让人干瞪眼
[rust notes] 15 string and text (Part 1)
SPI 详解
LeetCode 0108.将有序数组转换为二叉搜索树 - 数组中值为根,中值左右分别为左右子树
The sum of the unique elements of the daily question
1041 Be Unique
One question per day 2047 Number of valid words in the sentence
The connection and solution between the shortest Hamilton path and the traveling salesman problem
Leetcode-6108: decrypt messages
Data visualization chart summary (I)
【云原生】微服务之Feign自定义配置的记录
[practical skills] how to do a good job in technical training?
Leetcode-1200: minimum absolute difference
Introduction to convolutional neural network
1040 Longest Symmetric String