Tip-Review-Algorithm 第五期

Tip

Dash for macOS & 代码片段管理

实在憋不出什么可以分享的工作Tip了,归根到底还是工作不努力,学习不认真。自我反省🙋。

就分享个工具吧,Dash for macOS 是一个工具,主要有两大功能:API文档浏览和代码片段管理。目前我主要是用来做代码片段管理。

通过在Dash中设置映射:「缩写」->「代码片段」,在写代码时输入「缩写」,Dash就能自动替换成「代码片段」,对于使用频率较高的片段,比如打印日志,或者业务中比较固定的片段,就可以很快捷地输出,而不用自己写或者翻代码拷贝。

确实会有效率的提升。

Review

M1 暴打 Intel?——这次的芯片有何不同

之前mark了这篇文章,这周正好看到開發者週報 #73 也在讲Macbook Air M1的性能强劲,就看了这篇文章,大概了解一下M1芯片的几个优点。

  1. 用Soc可以解决CPU、GPU、NPU分散且架构不同的问题,提高交流效率。
  2. 利用统一内存架构(UMA)优化掉了都需要通过CPU访问内存的低效率问题。
  3. 通过高度集成,讲物理内存放在处理器旁边,通过减小物理距离来提高内存访问速度,强!
  4. 设置超大缓存来提高读写速度。
  5. 当然,5nm制程显然是功臣。

缺点:

缺点就是下单要考虑好到底买多大内存的,这个不好DIY了。哭😭。

Algorithm

滑动窗口最大值

描述:

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回滑动窗口中的最大值。

思路:

利用优先队列进行找最大值,然后注意最大值不能为当前窗口即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
* @lc app=leetcode.cn id=239 lang=cpp
*
* [239] 滑动窗口最大值
*/

// @lc code=start
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
// 利用优先队列
int N = nums.size();
priority_queue<pair<int, int>> queue;
vector<int> res;
for (int i = 0; i < k; i++)
{
queue.push(make_pair(nums[i], i));
}
res.push_back(queue.top().first);
for (int i = k; i < N; i++)
{
queue.push(make_pair(nums[i], i));
while (queue.top().second <= i-k)
{
queue.pop(); // 保证队列最大值在窗口内
}
res.push_back(queue.top().first);
}
return res;
}
};
// @lc code=end