输入:数组 nums(非负整数)。
要求:
1.从左到右依次检查,若 nums[i] == nums[i+1] → 执行 nums[i] *= 2, nums[i+1] = 0。
2.最后将所有 0 移动到末尾。
输出:操作后的数组。
思路:双指针法。
时间复杂度:O(n),空间复杂度:O(1)。
class Solution {
public:
vector<int> applyOperations(vector<int>& nums) {
int slow = 0;
int n = nums.size();
for (int i = 0; i < n; i++) {
if (i < n - 1 && nums[i] == nums[i+1]) {
nums[i] *= 2;
nums[i+1] = 0;
}
if (nums[i] != 0) {
nums[slow++] = nums[i];
}
}
for (int j = slow; j < n; j++) {
nums[j] = 0;
}
return nums;
}
};

150

被折叠的 条评论
为什么被折叠?



