Contents

ARST打卡第253周

lc2386_找出数组的第 K 大和 【TED演讲】为什么你应该停止设定目标 Go Generated Code Guide git快速清理本地无用修改,防止merge冲突线上版本

Algorithm

lc2386_找出数组的第 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
class Solution {
public:
    long long kSum(vector<int> &nums, int k) {
        int n = nums.size();
        long long total = 0;
        for (int &x : nums) {
            if (x >= 0) {
                total += x;
            } else {
                x = -x;
            }
        }
        sort(nums.begin(), nums.end());

        long long ret = 0;
        priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<>> pq;
        pq.push({nums[0], 0});
        for (int j = 2; j <= k; j++) {
            auto [t, i] = pq.top();
            pq.pop();
            ret = t;
            if (i == n - 1) {
                continue;
            }
            pq.push({t + nums[i + 1], i + 1});
            pq.push({t - nums[i] + nums[i + 1], i + 1});
        }
        return total - ret;
    }
};

Review

【TED演讲】为什么你应该停止设定目标

英文字幕版本只听懂了这些内容:

设置目标, 如果没有达成,会损坏我们的自信心,如果达成了,又会限制我们的效率,因为我们原本可以做得更好。

又看了中英字幕版本,发现的内容是:

设置目标后,可能太专注于目标,以至于有可能对自己有害处,甚至忽略了其他可能性,损害了投入产出比。

目标给反馈,但是同时也是一个限制,限制了你的可能性。

作者认为目标是局限,所以他觉的: 目标的达成,是对你设置目标的惩罚。

但行好事,莫问前程。不断朝着一个方向努力,变得越来越好。

Tips

Go Generated Code Guide

Share

git快速清理本地无用修改,防止merge冲突线上版本

  1. 确定本地修改的最新内容都是没有用的,有用的全在gitlab/github上
  2. git reset --hard 一个比较老的version(线上线下共同有的版本), 这样防止后面 git pull 出现冲突
  3. git pull