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.