作者:小迅
链接:https://leetcode.cn/problems/apply-operations-to-an-array/solutions/2297194/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-kg0j/来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
题意 -> 给定一个数组,按要求操作数组中的元素 要求:
- 如果 nums[i] == nums[i + 1] ,则 nums[i] 的值变成原来的 2 倍,nums[i + 1] 的值变成 0 。否则,跳过这步操作。
- 在执行完 全部 操作后,将所有 0 移动 到数组的 末尾 。
- 例如,数组 [1,0,2,0,0,1] 将所有 0 移动到末尾后变为 [1,2,1,0,0,0] 。
题目已经说的非常清楚了。直接从头到尾枚举即可完成操作一。 对于操作二,题目要求有序性,那么使用双指针移动非零元素,最后将剩余所有位置 置0 ,即可。
代码注释超级详细
代码
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* applyOperations(int* nums, int numsSize, int* returnSize){
for (int i = 0; i < numsSize-1; ++i) {//枚举操作一
if (nums[i] == nums[i+1]) {
nums[i] *= 2;
nums[i+1] = 0;
}
}
int i = 0, j = 0;
for (i = 0, j = 0; i < numsSize; i++) {//移动操作二
if (nums[i] == 0) continue;
nums[j++] = nums[i];
}
while (j < numsSize) {//置0清空多余位置
nums[j++] = 0;
}
*returnSize = numsSize;
return nums;
}
作者:小迅
链接:https://leetcode.cn/problems/apply-operations-to-an-array/solutions/2297194/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-kg0j/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。