原地题是力扣中一类特殊的题目,这类题目通常对算法的空间复杂度有较高的要求,用户常常被限制使用额外的空间,并直接使代码模板中的输入变量返回结果。
原地算法的定义
在计算机科学中,一个原地算法(in-place algorithm)是一种使用小的、固定数量的额外空间来转换资料的算法。当算法执行时,输入的资料通常会被要输出的部分覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)。
原地算法的示例
在该题中,题面中就有明确的表述:直接修改输入的二维矩阵,这意味着,我们将结果保存在自己创建的二维矩阵的变量中是无效的。
并且,这一类题的代码模板也与一般的题有所不同:
一般题目通常使用函数返回值输出结果,原地题的函数通常没有返回值或返回值比实际输出的要少
输入的变量通常为引用类型或指针
比如,在这题中,他的代码模板是:
void rotate(int** matrix, int matrixSize, int* matrixColSize){ // 这是 C 语言的代码模板 }
可以看到,输入中的 matrix
是二维指针,我们直接通过指针修改变量 matrix
的值,这些修改都是能被系统获取的。
有些语言会提供引用类型的输入变量,比如:
class Solution {public: void rotate(vector<vector<int>>& matrix) { // 这是 C++ 的代码模板 } };
这里定义 matrix 使用了 & 修饰符,因此它是引用类型。对引用类型的变量的修改,也都是能被系统获取的。
其他语言也是类似,这里不一一赘述。