2021-11-12:前 K 个高频元素。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <=
2021-11-12:前 K 个高频元素。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <= 105,k 的取值范围是 [1, 数组中不相同的元素的个数],题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。力扣347。
答案2021-11-12:
门槛堆。小根堆。
代码用golang编写。代码如下:
package main
import (
    "fmt"
    "sort"
)
func main() {
    nums := []int{1, 1, 1, 2, 2, 3}
    k := 2
    ret := topKFrequent(nums, k)
    fmt.Println(ret)
}
type Node struct {
    num   int
    count int
}
func NewNode(k int) *Node {
    res := &Node{}
    res.num = k
    res.count = 1
    return res
}
func topKFrequent(nums []int, k int) []int {
    map0 := make(map[int]*Node)
    for _, num := range nums {
        if _, ok := map0[num]; !ok {
            map0[num] = NewNode(num)
        } else {
            map0[num].count++
        }
    }
    heap := make([]*Node, 0)
    for _, node := range map0 {
        if len(heap) < k || (len(heap) == k && node.count > heap[0].count) {
            //heap.add(node);
            heap = append(heap, node)
            sort.Slice(heap, func(i, j int) bool {
                return heap[i].count > heap[j].count
            })
        }
        if len(heap) > k {
            heap = heap[1:]
        }
    }
    ans := make([]int, k)
    index := 0
    for len(heap) > 0 {
        ans[index] = heap[0].num
        heap = heap[1:]
        index++
    }
    return ans
}
执行结果如下:
 
2021-11-12:前 K 个高频元素。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <=的更多相关文章
- 2023-04-20:有一堆石头,用整数数组 stones 表示 其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎 假设石头的重量分别为 x 和
		2023-04-20:有一堆石头,用整数数组 stones 表示 其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎 假设石头的重量分别为 x 和 ... 
- 日常Java测试第二段 2021/11/12
		第二阶段 package word_show; import java.io.*;import java.util.*;import java.util.Map.Entry; public class ... 
- 日常Java测试第一段 2021/11/12
		课堂测试一 package word_show;import java.io.BufferedReader;import java.io.FileNotFoundException;import ja ... 
- Effective C++ 条款11,12  在operator= 中处理“自我赋值”  ||   复制对象时不要忘记每一个成分
		1.潜在的自我赋值 a[i] = a[j]; *px = *py; 当两个对象来自同一个继承体系时,他们甚至不需要声明为相同类型就可能造成别名. 现在担心的问题是:假如指向同一个对象, ... 
- leetcode 347. 前 K 个高频元素
		问题描述 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums ... 
- 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
		第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ... 
- LeetCode:前K个高频元素【347】
		LeetCode:前K个高频元素[347] 题目描述 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [ ... 
- [Swift]LeetCode347. 前K个高频元素 | Top K Frequent Elements
		Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ... 
- 前K个高频元素
		给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], ... 
- Leetcode 347.前K个高频元素 By Python
		给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], ... 
随机推荐
- nios verify failed 问题解决。
			nios 调试时碰到上图所示问题.根据下载地址可以判断下载flash.sdram都成功,这里说明电路设计和焊接都没有问题. 但是在flash地址verify failed between adress ... 
- 7. 基础增删改 - 使用Portal Webapi进行会员信息的增删改
			我们可以通过使用Portal Web API在Portal页面中跨所有Microsoft Dataverse表执行创建.更新和删除操作,下面我们就一起来看一下如何通过使用AJAX函数来进行操作. AJ ... 
- RecyclerView显示列表
			本次要讲的内容是利用RecyclerView显示Users列表的信息,如下图所示. 首先我们来创建模型User.java package com.example.mytest.User; import ... 
- 通过k8s部署服务
			一 使用docker运行fastapi程序(python封装http接口) 一 docker commit 1 下载python3的镜像 docker pull python:3.8-slim # s ... 
- Python学习笔记--元组+字符串
			元组 元组一旦定义完成,就不能再被修改 同样,元组也可以进行嵌套操作 当然,若是在元组里面嵌套一个list,那么list里面的元素是可以进行修改的! 案例: 实现: 字符串 查找索引值: 字符串替换: ... 
- Python学习笔记--布尔类型和比较运算符、if判断语句以及相关案例的实现
			布尔类型和比较运算符 代码: 结果: 主要有以下几类: 注意:bool类型的真假表示开头必须大写,例如:True和False 而要是想要得到布尔类型,除了直接定义,还可以通过比较运算得到布尔类型: i ... 
- Win10安装curl
			参看博客:https://blog.csdn.net/qq_37289115/article/details/106665123 
- python代码换行问题(用‘\’来达成)
			在 Python 中,可以使用反斜杠符号 '\' 来表示代码换行,从而实现在代码中进行换行,并保持语句的完整性.例如:. # 使用反斜杠符号进行换行 result = 10 + \ 20 + \ 30 ... 
- SSID、BSSID 和 ESSID辨析
			参考 [1] 华为-WLAN常用概念 [2] 了解网络术语 SSID.BSSID 和 ESSID [3] Difference between RSSI and RSS or RSS vs RSSI 
- Windows Server 远程桌面(RDP)使用公网可信机构所签发的SSL证书的方法
			Windows Server 远程桌面默认使用系统自签名证书,在任何终端进行远程桌面登录时均会提示证书告警 虽然可以通过勾选下方"不再询问我是否连接到此计算机"选项使之后登录不再提 ... 
