【代码随想录】算法训练计划13

1、347. 前 K 个高频元素

题目:
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

思路:
  • sort.Slice学习一下,其实还有sort.String等
func topKFrequent(nums []int, k int) []int {
    // 代码一刷,快排,或者小/大顶堆
    map1 := make(map[int]int, 0)
    for _,v := range nums {
        map1[v]++
    }
    ans := []int{}
    for k,_ := range map1 {
        ans = append(ans, k)
    }
    sort.Slice(ans, func(a,b int)bool{
        return map1[ans[a]]>map1[ans[b]]
    })
    return ans[:k]
}

2、239. 滑动窗口最大值

题目:
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回 滑动窗口中的最大值 。

思路:
  • 1、为什么pop时候要:val == m.Front()
  • 2、queue.Push(nums[i]) // 5432咋办
func maxSlidingWindow(nums []int, k int) []int {
    queue := NewMyQueue()
    length := len(nums)
    res := make([]int, 0)
    for i:=0; i<k; i++ {
        queue.Push(nums[i]) // 5432咋办
    }
    res = append(res, queue.Front())
    for i := k; i<length; i++ {
        queue.Pop(nums[i-k])
        queue.Push(nums[i])
        res = append(res, queue.Front())
    }
    return res
}
// 单调队列
type MyQueue struct {queue []int}
func NewMyQueue() *MyQueue {
    return &MyQueue{
        queue: make([]int, 0),
    }
}
func (m *MyQueue) Front() int {return m.queue[0]}
func (m *MyQueue) Back() int {return m.queue[len(m.queue)-1]}
func (m *MyQueue) Empty() bool {return len(m.queue)==0}
func (m *MyQueue) Push(val int) {
    for !m.Empty() && val>m.Back() {
        m.queue = m.queue[:len(m.queue)-1]
    }
    m.queue = append(m.queue, val)
}
func (m *MyQueue) Pop(val int) {
    if !m.Empty() && val == m.Front() {
        m.queue = m.queue[1:]
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值