【发布时间】:2021-07-10 07:58:51
【问题描述】:
nums 是一个大小为 N+1 的数组,元素范围从 1 到 N,只有一个重复元素。
为什么我们在下面的代码中在nums[ abs( nums[i] ) - 1 ]中使用-1:
class Solution {
public:
int findDuplicate(vector<int>& nums) {
for (int i = 0; i < nums.size(); ++i)
{
if (nums[abs(nums[i]) - 1 ] >= 0)
nums[abs(nums[i]) - 1 ] = -nums[abs(nums[i]) - 1];
else
return abs(nums[i]);
}
return 0;
}
};
这段代码的逻辑是遍历每个元素并将其设为负数,如果遇到已经为负数的元素,那就是重复的,但我不明白为什么在我做空运行时我们在这里使用-1在纸上我得到错误的答案
【问题讨论】:
-
请告诉我们更多关于
nums的期望以及您正在查看的竞争代码挑战网站上的问题。 -
答案在你没有告诉我们的那部分问题——数组中值的范围。
标签: c++ data-structures