自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/weixin_53717695/article/details/142725384

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!