天猫店买卖网站,界面ui设计,百度搜索高级搜索,创建网站的好处1、347. 前 K 个高频元素
题目#xff1a; 给你一个整数数组 nums 和一个整数 k #xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]
思路#xff1a;
sort.Slice学习一下#xff0c;其实还有so…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; ik; i {queue.Push(nums[i]) // 5432咋办}res append(res, queue.Front())for i : k; ilength; 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() valm.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:]}
}