Contents

ARST打卡第209周[209/521]

Algorithm

lc1010_总持续时间可被60整除的歌曲

思路: 看了一下提示,是通过所有的数对60取模后计数,然后配对能凑成60的数

 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:
    int numPairsDivisibleBy60(vector<int>& time) {
        unordered_map<int, int> cnt;
        for (auto x : time) {
            cnt[x%60]++;
        }
        int ans = 0;
        for (int i=0; i <= 30; i++) {
            if (!cnt[i]) {
                continue;
            }
            // cout << "i = " << i << " cnt[i] = " << cnt[i] << endl;
            if (i == 0 || i == 30) {
                // 36*1e8 已经超过 21*1e8 爆int了... 不是42*1e8才爆,所以先除以2 , WA一发
                if (cnt[i] & 1) {
                    ans += (cnt[i] - 1) / 2 * cnt[i];
                } else {
                    ans += cnt[i] / 2 * (cnt[i] - 1);
                }
                // 这里要注意continue...或者下面else...上面搞的没else又wa一发
                continue;
            }
            // 3*1e4 * 3*1e4 = 9 * 1e8,这种不会爆
            ans += cnt[i] * cnt[60 - i];
            // cout << "ans = " << ans << " cnt[60 - i] = " << cnt[60 - i] << endl;
        }
        return ans;
    }
};

答案更精简一些:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Solution {
public:
    int numPairsDivisibleBy60(vector<int>& time) {
        vector<int> cnt(60);
        for (int t : time) {
            cnt[t % 60]++;
        }
        long long res = 0;
        for (int i = 1; i < 30; i++) {
            res += cnt[i] * cnt[60 - i];
        }            
        res += (long long)cnt[0] * (cnt[0] - 1) / 2 + (long long)cnt[30] * (cnt[30] - 1) / 2;
        return (int)res;
    }
};

Review

【TED演讲】开源学习革命的诞生

开源学习的诞生:

  1. 开源为了更好地共同创作,更好地共同修改,更好地传播知识
  2. 从而更好地一起创造更好的世界

Tips

一文带你看透基于LSM-tree的NoSQL系统优化方向

Share

人生其实是运气占主导,所以快乐生活,为而不争

https://youtu.be/qzIfQ5_gYzc

老高介绍了人生运气实验,发现人生的财富大小其实和能力的大小相关性基本没有太多相关性,更多的是运气占人生主导。

能力只是抓住机会使得财富翻倍的概率。所以能力中等偏上就已经很不错了,剩下的全靠运气。

所以把能力提升到中等偏上的后,多多去开阔视野,去发现好运,这样才是最大可能的获得更多财富。

而且了解到运气才是人生的主导,也能让我们感到释然,做好当下的事情,并也及时行乐,尽人事,听天命,这样才能与自己和解,成为一个内心平和的人。