Contents

ARST打卡第213周[213/521]

Algorithm

lc2455_可被三整除的偶数的平均值

题解: 就是按照题意模拟

其中是小学数学原理,各数位的和能被3整除,那就是能被3整除…

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 时间8 ms击败74.81% 内存13.3 MB 击败50%
class Solution {
public:
    int averageValue(vector<int>& nums) {
        double sum = 0;
        int cnt = 0;
        for (auto x : nums) {
            if (x & 1) {
                continue ;
            }
            int tmp_sum = 0;
            int src_x = x;
            while (x) {
                tmp_sum += x % 10;
                x /= 10; 
            }
            if (tmp_sum % 3 == 0) {
                sum += src_x;
                cnt++;
            }
        }
        return cnt ? (int)floor(sum/cnt) : 0;
    }
};

后面一想,好像根本不用各数位,直接判断被整除就行…(不过这个好像取模导致用内存更多了)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// 时间8 ms击败74.81% 内存13.3 MB 击败37.60%
class Solution {
public:
    int averageValue(vector<int>& nums) {
        double sum = 0;
        int cnt = 0;
        for (auto x : nums) {
            if (x & 1) {
                continue ;
            }
            if (x % 3 == 0) {
                sum += x;
                cnt++;
            }
        }
        return cnt ? (int)floor(sum/cnt) : 0;
    }
};

题解更是在这个基础上更简洁了…

  • 整除3和判断偶数结合为整除6
  • 然后向下取整其实就是计算机int相除的自然结果, 不用floor…
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// 时间4 ms击败95.35% 内存13.4 MB击败 30.23%
class Solution {
public:
    int averageValue(vector<int>& nums) {
        int total = 0, k = 0;
        for (int a : nums) {
            if (a % 6 == 0) {
                total += a;
                k++;
            }
        }
        return k > 0 ? total / k : 0;
    }
};
// 链接:https://leetcode.cn/problems/average-value-of-even-numbers-that-are-divisible-by-three/solutions/2284975/ke-bei-san-zheng-chu-de-ou-shu-de-ping-j-vruh/

Review

【TED演讲】如何实现你的目标

如何实现目标:

  • 不要过分关注目标 – 这样你只会焦虑目标为啥没达成,而无法采取有效的行动
  • 关注自身的行动 – 关注自己能够为目标做什么事情,因为目标是不可控的,只有自身行为是可控的
  • 把目标细化成每天的行为,然后不断迭代,可能最终无法成功,但是可以通过不断努力接近,而且尽力而为,问心无愧

Tips

Rocksdb Compaction源码详解

Share-shell中'的奇妙作用

shell中使用了单引号 ’ 来定义字符串,这意味着大部分特殊字符都会被视为普通字符,不需要进行转义。

  • 所以整个字符串可以以'来启动停止,这是shell的特性。
1
2
3
4
## mystring='hel|o|_$()/\/\LD,奇怪'

## echo $mystring
hel|o|_$()/\/\LD,奇怪
  • 如果你的字符串需要',那么就用'拼接两段字符串,然后在来两段字符串中间 转义'
1
2
3
4
## mystring='Yes, it'\''s my computer.'

## echo $mystring
Yes, it's my computer.