Algorithm
703. 数据流中的第K大元素
设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。
你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。
示例:
int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3); // returns 4
kthLargest.add(5); // returns 5
kthLargest.add(10); // returns 5
kthLargest.add(9); // returns 8
kthLargest.add(4); // returns 8
说明: 你可以假设 nums 的长度≥ k-1 且k ≥ 1。
解决方案:
我的解法:
class KthLargest {
public KthLargest(int k, int[] nums) {
maxSize = k;
minHeap = new PriorityQueue<>(maxSize);
for (int num: nums) {
add(num);
}
}
public int add(int val) {
int size = minHeap.size();
if (minHeap.size() < maxSize)
{
minHeap.add(val);
}
else if (val > minHeap.peek()) {
minHeap.poll();
minHeap.add(val);
}
return minHeap.peek();
}
private PriorityQueue<Integer> minHeap;
private int maxSize;
}
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest obj = new KthLargest(k, nums);
* int param_1 = obj.add(val);
*/
更高效解法:
无
Review
抽象分支是一种用于逐步对软件系统进行大规模更改的技术,允许在变更发生期间仍然能够定期发布系统。
下面是这个系统的示例,我们需要对该系统进行更新。
首先需要创建一个抽象层,用于捕获客户端代码和系统之间的交互。令部分客户端通过该抽象层来调用系统。
没问题则逐步将剩余的客户端代码也引流到抽象层。另外在此期间,还是通过抽象层来增加系统单元测试覆盖的好机会。
构建一个新系统来实现新的需求,将部分需要该功能的客户端通过新的抽象层引入新系统。
最后将之前的系统完全删除。
Tip
最近电脑mac升级感觉电脑盒盖休眠后耗电量激增,有时候背在身后都能感收到它的温度。查了下应该是休眠模式被更改了。可以在终端中输入下面的命令查看:
pmset -g
查看hibernatemode这一行,值为3。
通过输入下面命令将该值修改为25:
sudo pmset -a hibernatemode 25
这样休眠模式下的耗电就会降到最低了。
Share
最近对git分支模型做了一定研究,给客户设计了一套分支模型:
该分支模型参考阿里的AoneFlow,对发布分支进行了简化。
该分支模型的好处是:
- 发布灵活方便。
- 尽可能地减少合并和冲突。
- 功能分支独立。
- master分支随时处于发布状态。
参考文献
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!