0%

类型双关(type punning)经常在需要高性能的代码和网络编程中出现。比如:

  • 利用强制类型转换,将floatint互相转换。
  • malloc申请来的内存指针void *强制类型转换为一个对象的指针类型X *,并通过该指针访问X的成员。

然而,C++中的大部分的type punning(包括以上的两种)都会导致undefined behaviour。
我们将解决以下问题:

  • type punning 会导致怎样的undefined behaviour?
  • type punning 为何会导致undefined behaviour?
  • 哪些type punning是正确的,哪些是错误的?
  • 当我们必须进行type punning时,如何避免undefined behaviour来实现type punning的功能?

CppCon 2019: Timur Doumler “Type punning in modern C++”

Read more »

N数之和问题:给定一个对于所有自变量$x_1, x_2, \cdots, x_n$都在一个有限的整数区间中,且严格单调递增的函数$f(x_1, x_2, \cdots, x_n)$。如何找到该函数的零点?

为了解决N数之和问题,我们首先考虑两数之和问题,我们从一个无任何附加信息的两和之和问题开始,通过不断添加新的信息,利用新的信息,来降低算法的复杂度。

Read more »

矩阵问题
LC73 矩阵置零
LC54 螺旋矩阵
LC59 螺旋矩阵II
LC48 旋转图像
LC74 Search a 2D Matrix
LC240 Search a 2D Matrix II
LC378 Kth Smallest Element in a Sorted Matrix

基本运算
LC371 两整数之和
LC369, 给单链表加一
LC55 加一
LC2 两数相加
LC415 字符串相加
LC445 两数相加II
LC43 字符串相乘
LC29 两数相除
LC50 快速幂
LC96 Sqrt(x)

浮点数比较
LC149 直线上最多的点数

日期间隔

溢出处理:
LC7 整数反转

进制转换:
LC13 罗马数字转整数 [优先匹配2字符]
LC168 Excel表列名称 [没有0,商借1给余数]

常见数列:
LC118 二项式系数
LC119 二项式系数II

随机数:
LC470 用Rand7()实现Rand10()

Read more »