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