【前缀+Hash】与【双指针】的区别

注:双指针法俗称“滑动窗口”,但我不喜欢这个名称,因为这给人感觉是一个固定长度的窗口在(数组上)滑动,而实际上该方法中的“窗口”长度不是固定的,更像个手风琴或弹簧。 例题 前缀+Hash:560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 1输入:nums = [1,1,1], k = 2 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 题解: 1class Solution { 2public: 3 int subarraySum(vector<int>& nums, int k) { 4 …

差分数列

概念 数列 $a$,$b$ 满足以下条件: $$ \begin{align*} b_1 &= a_1\\ b_2 &= a_2 - a_1\\ &\vdots\\ b_n &= a_n - a_{n-1} \end{align*} $$ 故有: $$ \begin{align*} a_1 &= b_1\\ a_2 &= b_1 + b_2\\ &\vdots\\ a_n &= b_1 + b_2 + \cdots + b_n \end{align*} $$ 其中称 $b$ 为 $a$ 的差分(Difference Array),$a$ 为 $b$ 的前缀和(Prefix Sum Array)。两者为一组逆运算。 用法 差分数列的一个 …

Using Pbuilder to (Cross-)Build Debian Packages

One day I wanted to build a program for a 64-bit ARM OS with basic dpkg support. Since its binaries for x86 and the corresponding source code had been adapted and maintained as Debian packages by several distros, an easy way for me would be to grab the source code of one package, cross-build it for ARM 64 architecture, …

C++ 中的 Name Mangling

关于 C++ Name Mangling 的故事,还要从 C 语言说起。 C 语言的场景 在 C 语言中,一个函数的函数名唯一标识这个函数。换另外两个表述: 不同函数的界定与区分只看函数名,与返回值、入参类型和个数等因素皆无关; 出现多个相同函数名的函数定义意味着重定义错误。 1void foo() { } 2void foo(int a) { } // error: redefinition of ‘foo’ 3int foo() { } // error: conflicting types for ‘foo’ C 语言的这种对函数的处理比较原始,但也有好处。这里涉及到一个背景知识:C/C++ 源代码经过编译器编译后,编译器会用 …

用 GDB 调试动态链接库

前言 写本文的目的是为了记录一个【基于 GDB 对动态链接库(DSO1)的错误进行调试】的过程,重要的内容包括: 获取进程发生错误时的状态; 查看进程在该状态下的内存分布; 在 GDB 中用正确地址加载符号表,以恢复函数调用堆栈。 本文主要参考了 Ubuntu Wiki 上的这篇博文 。按照其版权及许可证要求,本文采用 Creative Commons Attribution-ShareAlike 3.0 进行许可。 Hybris 简介 Libhybris 是一种关于 libc 库兼容问题的解决方案,让我们在基于 GNU C Library (Glibc)的系统上2可以运行用 Bionic 编译的库(主要是 Android …