leetcode-10/6

1.最大子数组和【53】

找出具有最大和的连续子数组

思路:

        利用Kadane's Algorithm,一种解决最大子数组和的高效算法。用两个变量记录:

        一个记录以当前元素结尾的子数组和,该数组更新的时候,考虑要不要舍弃之前的和;另一个记录最大的子数组和

2. 前K个高频元素【347】

思想:

        先用哈希表将元素以及元素出现的次数存储起来;再通过堆排序,对元素出现次数进行排序,使得时间复杂度优于其它排序,优于O(nlogn)。

细节:(Java版)

        2.1.堆排序采用的排序方式是小顶堆,因为小顶堆的最顶部的元素存储的是值最小的,这样如果pop出去,就是小的值,留下来的就是前K个高频率的值;

        2.2.堆用优先级队列PriorityQueue实现,队列存储的是元素及元素出现次数的键值对,只不过排序的时候采用了Comparator排序器,然后用compare方法依据次数进行了排序;

        3.3.哈希表同时访问键值对用Entry,单独访问key就用entry.getKey(),访问value就用entry.getValue()

 for (Map.Entry<Integer, Integer> entry : occurrences.entrySet()) 

        3.4.最后返回结果的时候,由于小顶堆上面的元素值更小,如果返回要求按从大到小就得转一下顺序,不要求就直接返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值