ARTS Week 26
Algorithm
本周的 LeetCode 题目为 215. 数组中的第K个最大元素
给定整数数组 nums
和整数 k
,请返回数组中第 k
个最大的元素。
请注意,你需要找的是数组排序后的第 k
个最大的元素,而不是第 k
个不同的元素。
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
第 K 个大的元素可以利用小顶堆进行查找,维护一个元素个数不超过 K 的小顶堆。遍历数组,若堆中元素个数小于K时,则将数组元素加入堆,并调整堆;若堆中元素个数为K时,若当前元素大于对于元素时,移除堆顶元素,将当前元素加入堆,并调整堆,直至数组遍历结束。
class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i = 0; i < nums.length; i++) {
if (i < k) {
pq.offer(nums[i]);
} else if (i >= k && nums[i] > pq.peek()) {
pq.poll();
pq.offer(nums[i]);
} else {
continue;
}
}
return pq.peek();
}
}
Review
本周 Review 的英文文章为:作为软件开发人员如何开始成为自由职业者
首先你要想清楚,你打算投入多少时间从事自由职业,是全职工作还是作为兼职工作,当自由职业作为你唯一的收入来源时,这和你将其作为额外收入是完全不同的两个概念。下面是作者的一些建议:
- 忘记名片和个人网站。首先你要做的是如何提高知名度和打造个人品牌,而不是建立名片和个人网站,这样你的客户才能找到你。
- 社交网站是你可以做的最重要的事。你需要建立起自己的社交网络,这样才能更有效地发现你的潜在客户。
- 提防自由平台。如果一个平台通过侵犯您的隐私来监视获取您的个人信息,那么对你还是客户都是不利的,因此对那些要说“不”。
- 在现实世界中开展业务。如果你在大学,多结交同学;多去参加本地的相关领域的聚会,在聚会中试着多认识合作者;多和当地的企业进行联系,告诉他们你可以提供帮助服务。
Tip
C语言中,打开文件时r+
、w+
、a+
标志的区别:
r+
:同时支持读和写;但当文件不存在时,打开将会失败;fseek
可以被用来调整读和写的偏移量w+
:同时支持读和写;但当文件不存在时,则会创建一个文件后再打开;fseek
仅能被用来调整读的偏移量a+
:同时支持读和写;但当文件不存在时,则会创建一个文件后再打开;fseek
仅能被用来调整读的偏移量,且写入时只会写入到文件末尾
Share
本周一直在路上,没有太多的思考,后面的生活将逐步踏入正轨,一步一步来吧。