解决两个和问题可以使用 O(n) 复杂度算法来实现,但是,我只是尝试了 O(n^2) 复杂度,这是使用 2 个嵌套循环检查每个第 i 个整数与每个其余整数对目标值,以下是 O(n^2) 实现,对于 2 个实现,nums是整数数组,n是 nums 的大小,indices是一个大小为 2 的数组,用于保存索引2个整数
for(int i=0; i<n; ++i)
for(int j=i+1; j<n; ++j) {
if(nums[i] + nums[j] == target) {
indices[0] = i; indices[1] = j; return indices;
}
}
这个实现在 140 毫秒内解决了这个问题。我尝试了另一种 O(n^2) 方法,即对于从 1 到 n-1 的每个 k 值,检查第 i 个整数和第 (i+k) 个整数的和与目标值,以下是实现,
for(int k=1; k<n; k++)
for(i=0; i<n-k; i++) {
int j=i+k;
if(nums[i] + nums[j] == target) {
indices[0] = i; indices[1] = j; return indices;
}
}
如您所见,相同的循环体,但运行速度更快,运行时间为 8 毫秒。这是为什么?是否与空间局部性有关?