Contents

ARST打卡第264周

lc2903_找出满足差值条件的下标1 【TED演讲】眼下人类所需的亿万环境污染治理方案 Kubernetes集群中DNS故障的可观测性与根因诊断 valgrind设置无限报错以及排除初始化报错

Algorithm

lc2903_找出满足差值条件的下标1

思路:

直接遍历检查 i, i+indexDifference.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Solution {
public:
    vector<int> findIndices(vector<int>& nums, int indexDifference, int valueDifference) {
        vector<int> ans(2, -1);
        int sz = nums.size();
        for (int i = 0; i < sz; i++) {
            for (int j = i + indexDifference; j < sz; j++) {
                if (abs(nums[i] - nums[j]) >= valueDifference) {
                    ans[0] = i;
                    ans[1] = j;
                    return ans;
                }
            } 
        }
        return ans;
    }
};

题解里面还有动态维护前面 i 遍历的最大最小值的单次遍历的方法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
    vector<int> findIndices(vector<int>& nums, int indexDifference, int valueDifference) {
        int minIndex = 0, maxIndex = 0;
        for (int j = indexDifference; j < nums.size(); j++) {
            int i = j - indexDifference;
            if (nums[i] < nums[minIndex]) {
                minIndex = i;
            }
            if (nums[j] - nums[minIndex] >= valueDifference) {
                return {minIndex, j};
            }
            if (nums[i] > nums[maxIndex]) {
                maxIndex = i;
            }
            if (nums[maxIndex] - nums[j] >= valueDifference) {
                return {maxIndex, j};
            }
        }
        return {-1, -1};
    }
};
// https://leetcode.cn/problems/find-indices-with-index-and-value-difference-i/solutions/2784952/zhao-chu-man-zu-chai-zhi-tiao-jian-de-xi-wxxb/

Review

眼下人类所需的亿万环境污染治理方案【TED演讲】

都知道二氧化碳过多会导致全球气候变暖,然后导致南北极融化,海岸线上升。

所以环境中的二氧化碳需要一套系统去做回收,固化。

这里视频中演讲者讲到通过基金会激励,然后实现碳中和市场机制。

预先市场承诺机制(AMC),旨在支持碳去除技术的规模化应用。

Tips

Kubernetes 集群中 DNS 故障的可观测性与根因诊断

Share

valgrind设置无限报错以及排除初始化报错

一般使用 valgrind 都是这样进行程序启动运行:

1
valgrind --leak-check=full --track-origins=yes --show-reachable=yes --log-file=./mem.log ./bin/your_program

但是这样对于大后台程序,容易反复报错其中的 Log 的 char 数组未 memset 初始化, 但是实际代码是计算好填入字符长度并在末尾填入了 \0 的。

最终导致日志被打印超过 10000000 次,然后 valgrind 不再继续运行:

1
2
3
4
5
==201844== More than 10000000 total errors detected.  I'm not reporting any more.
==201844== Final error counts will be inaccurate.  Go fix your program!
==201844== Rerun with --error-limit=no to disable this cutoff.  Note
==201844== that errors may occur in your program without prior warning from
==201844== Valgrind, because errors are no longer being displayed.

因为可以设置无限报错--error-limit=no,以及排除初始化报错--undef-value-errors=no:

1
valgrind --error-limit=no --undef-value-errors=no --leak-check=full --show-reachable=yes --log-file=./mem2.log ./bin/your_program