这段代码有一些问题。首先,在判断 (*iter)==0 && (*(iter + 1))>0||*(iter + 1))<0
这个条件语句时,有一个括号的位置放错了,应该是 (*iter)==0 && ((*(iter + 1))>0 || *(iter + 1)<0)
。其次,在交换元素时,需要确保 *(iter + 1)
的索引不超出数组边界,因为最后一个元素后面没有可供交换的元素。
以下是修正过的代码:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for (auto iter = nums.begin(); iter != nums.end() - 1; ++iter) {
if ((*iter) == 0 && ((*(iter + 1)) > 0 || *(iter + 1) < 0)) {
auto tmp = *iter;
*iter = (*(iter + 1));
(*(iter + 1)) = tmp;
}
}
}
};
这样修改后,代码应该能够正确地将数组中的零元素移动到末尾,并保持其他元素的相对顺序不变。
内容由零声教学AI助手提供,问题来源于学员提问