LeetCode·每日一题·2460. 对数组执行操作·模拟

作者:小迅
链接:https://leetcode.cn/problems/apply-operations-to-an-array/solutions/2297194/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-kg0j/来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目LeetCode·每日一题·2460. 对数组执行操作·模拟_第1张图片

 

示例LeetCode·每日一题·2460. 对数组执行操作·模拟_第2张图片

 

思路

题意 -> 给定一个数组,按要求操作数组中的元素 要求:

  • 如果 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(LeetCode刷题笔记,leetcode,算法,职场和发展)