題目連結:
題目意譯:
你被給定一個索引值從 0 開始且大小為 n 的陣列 nums,其由非負整數組成。
你需要執行 n - 1 次操作到該陣列上,其中在第 i 次操作(索引值從 0 開始),你將對 nums 的第 i 個元素執行以下操作:
如果 nums == nums[i + 1],則將 nums[i] 乘以 2 並將 nums[i + 1] 設為 0;反之,你將忽略此次操作。
在執行所有操作之後,將所有的 0 移到陣列的結尾。
例如,陣列 [1,0,2,0,0,1] 在將所有 0 移到結尾後將會是 [1,2,1,0,0,0]。
回傳最終的陣列。
注意到每次操作應依序執行,而不是同時執行。
限制:
2 ≦ nums.length ≦ 2000
0 ≦ nums[i] ≦ 1000
範例測資:
範例 1:
輸入: nums = [1,2,2,1,1,0]
輸出: [1,4,2,0,0,0]
解釋: 我們將執行以下操作:
- i = 0: nums[0] 和 nums[1] 不相等,所以我們忽略此次操作。
- i = 1: nums[1] 和 nums[2] 相等,所以我們將 nums[1] 乘以 2 並將 nums[2] 變為 0。陣列變成 [1,4,0,1,1,0]。
- i = 2: nums[2] 和 nums[3] 不相等,所以我們忽略此次操作。
- i = 3: nums[3] 和 nums[4] 相等,所以我們將 nums[3] 乘以 2 並將 nums[4] 變為 0。陣列變成 [1,4,0,2,0,0]。
- i = 4: nums[4] 和 nums[5] 相等,所以我們將 nums[4] 乘以 2 並將 nums[2] 變為 0。陣列變成 [1,4,0,2,0,0]。
之後,我們將所有 0 移動到結尾,得到陣列 [1,4,2,0,0,0]。
範例 2:
輸入: nums = [0,1]
輸出: [1,0]
解釋: 沒有操作可以執行,所以我們單純地將 0 移動到陣列的結尾。
解題思維:
就先單純地用迴圈掃過一次 nums 並根據題目要求做出操作即可。
接著用
這題的方式把所有非零的元素擺到前面,而那些 0 自然就會被擠到結尾了。最後回傳該陣列即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。