LeetCode · 毎日の質問 · 2460. 配列に対する操作の実行 · シミュレーション

著者: Xiao Xun
リンク: 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] になります。

テーマは非常に明確に述べられています。操作 1 は、最初から最後まで直接列挙することで完了します。操作 2 の場合、タイトルには順序が必要なので、ダブル ポインターを使用してゼロ以外の要素を移動し、最後に残りの位置をすべて 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

おすすめ

転載: blog.csdn.net/m0_64560763/article/details/131041271