通常情况下我们 科学上网 所用代理的协议是 socks,比如 shadowsocks,然而总有一些软件在设置 proxy 的时候不支持 socks 协议只支持 http/https,比如 vscode,因此我们需要一个替代工具完成 httpsocks 的转换。

Linux 下推荐的工具是 privoxy,这个软件在很多发行版的软件仓库中自带,比如 ubuntu下面以 Ubuntu18.04 为例介绍用法

安装:sudo apt-get install privoxy

privoxy 配置文件所在的位置为:/etc/privoxy/config 其中有几个配置项如下:

阅读全文

非教育网的情况下,访问 github 实在是慢到无法忍受,10几KB/s,因此使用 git 还是需要代理来帮助呀。

git 自带 proxy 相关的配置项:http.proxy 以及 https.proxy,并且支持 socks5 协议。

配置方法如下:

git config --global http.proxy 'http://127.0.0.1:1080'  #示例,改成你自己的地址和端口号
git config --global http.proxy 'socks5://127.0.0.1:1080'

# https同理,https.proxy

删除代理:

git config --global --unset http.proxy

int array2[2][2] = {{1, 2}, {3, 4}};
int num = 100;

int (*p[2]);
int *pp[2];
int (*ppp)[2];

p[0] = pp[0] = #
ppp = array2;

//输出: 1   3
cout << *(*ppp) << "   " << *(*(ppp + 1)) << endl;

上面 p 和 pp 等价,是指针数组. ppp 表示二维数组的指针。

讨论几个二分查找的变换问题,主要为4个,查找 第一个大于/大于等于 target 的数(左边界),查找 最后一个小于/小于等于 target的数(右边界).
主要是注意临界条件不同,小心会死循环.

假设数组为单调递增。

左边界

  • 查找第一个大于 target 的数
// >
int binSearchUpper(vector<int> &array, int target){
    int left = 0, right = array.size() - 1;
    while(left < right){
        int mid = left + (right - left) /2;
        if (array[mid] > target)
            right = mid;
        else
            left = mid + 1;
    }
    return left;
}

阅读全文

本文分为两个部分,一为讨论TopK问题的类型,二为相关的解题思路和C++代码实现。

TopK 问题的类型

TopK 问题一般为海量数据问题,可以分为两种大类:

  • 找最大/最小的 K 个数

这种问题一般分为两种类型,一为内存不够无法一次性加载,二为内存充足可以完全处理数据。

  • 找重复次数最大的 K 个数

这种问题一般是涉及极其庞大的数据量,内存不可能一次性加载完成。必须采用 分治法

阅读全文