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

本周一直在路上,没有太多的思考,后面的生活将逐步踏入正轨,一步一步来吧。

上一篇:MongoDB readConcern 原理解析


下一篇:ARTS Week 26