Contents

ARST打卡第261周

lc1235_规划兼职工作 【TED演讲】冒险如何改变你的大脑 Web3黑话汇总 玩rust写的编辑器lapce

Algorithm

lc1235_规划兼职工作

记得以前面试碰到过类似的题目,当时回答的还可以

思路:

这里应该是dp贪心获取最大利润:

  1. 时间需要序列化一下
  2. dp[i][j] 表示区间 i,j 的最大利润
  3. dp[0][n] 就是答案值
  4. 一开始初始化数组值为-1,然后再把所有输入数组填成对应的值。

但是上面思路明显不行,我只要贪心dp[0][n], 没有充分利用题目特性, 应该要搞成dp[n], 上面操作绝对会超时。

序列化之后,每个时间点都是有用的时间点。

过了30分钟,没有快速想出思路,说明好久没有刷题又不熟练了,学习一下题解吧。

题解还真是动态规划,不过没有用序列化,而是直接二分查找替换了序列化。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
    int jobScheduling(vector<int> &startTime, vector<int> &endTime, vector<int> &profit) {
        int n = startTime.size();
        vector<vector<int>> jobs(n);
        for (int i = 0; i < n; i++) {
            jobs[i] = {startTime[i], endTime[i], profit[i]};
        }
        sort(jobs.begin(), jobs.end(), [](const vector<int> &job1, const vector<int> &job2) -> bool {
            return job1[1] < job2[1];
        });
        vector<int> dp(n + 1);
        for (int i = 1; i <= n; i++) {
            // dp max 确定是否选择前一份工作
            // 二分查找前一份工作选择时的可选工作,就是前面的结束时间小于等于当前开始时间
            // 下标都加了1,所以dp[k]的k不用再减一了
            int k = upper_bound(jobs.begin(), jobs.begin() + i - 1, jobs[i - 1][0], [&](int st, const vector<int> &job) -> bool {
                return st < job[1];
            }) - jobs.begin();
            dp[i] = max(dp[i - 1], dp[k] + jobs[i - 1][2]);
        }
        return dp[n];
    }
};

Review

【TED演讲】冒险如何改变你的大脑

青年时期,对社会认知不足,会导致青年比较容易做一些比较冒险的事情,或者说极端的事情。 并且结合习惯形成会导致比较坏的结果。

所以要关爱青年身心健康,以及建立更加完善的青年安全机制,比如避免他们被诈骗什么的。

当然青年时期也尽量提供给他们积极创作方面的冒险,让他们形成正向的冒险回报的习惯结果。

Tips

Web3黑话汇总

Share

玩rust写的编辑器 lapce

玩了一下,感觉不像zed第一次打开那样讨喜, 总体感觉如下:

  • remote-ssh好评
  • 插件系统好评
  • 设置界面好评
  • 默认支持 lapce 命令在 wsl 使用好评
  • ui差评
  • vim-like原生设置好评,翻页不是ctrl+f差评

评价,不如 zed 和 vscode。