# 题目描述
对数组执行操作
给你一个下标从0 开始的数组 nums ,数组大小为n ,且由 非负 整数组成。
你需要对数组执行n - 1 步操作,其中第 i 步操作(从 0 开始计数)要求对nums 中第i 个元素执行下述指令:
- 如果 
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]。 返回结果数组。 
注意 操作应当 依次有序 执行,而不是一次性全部执行。
提示:
2 <= nums.length <= 20000 <= 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[5]的值变成 0 。数组变成[1,4,0,2,0,0]。 执行完所有操作后,将 0 全部移动到数组末尾,得到结果数组[1,4,2,0,0,0]。
用例2:
- 输入:
nums = [0,1] - 输出:
[1,0] - 解释:无法执行任何操作,只需要将 
0移动到末尾。 
# 思路
原地操作实现,不额外开辟空间
# 代码实现
/**
 * @param {number[]} nums
 * @return {number[]}
 */
// 输入
var __readline = require("readline-sync");
__readline.setDefaultOptions({prompt: ""})
var readline = __readline.prompt;
console.log("请输入nums: ");
const nums = readline().split(" ").map(Number);
var applyOperations = function(nums) {
  // 先执行n- 1次操作
  // nums[i] == nums[i + 1] ——> nums[i] = nums[i] * 2; nums[i + 1] = 0
  // 执行完n-1之后,将0移动到数组末尾
  
  // 原地操作
  // n - 1歩操作
  // 遍历到n - 1即可
  for(let i = 0; i < nums.length - 1; i ++){
      if(nums[i] == nums[i + 1]){
          nums[i] = nums[i] * 2;
          nums[i + 1] = 0;
      }
  }
  // 移动0
  // 快慢指针
  for(let fast = 0, slow = 0; fast < nums.length; fast ++){
      // fast 找不为0的,然后跟slow交换,slow的位置是0的位置
      // fast为0,slow就不移动,保持slow指向0
      if(nums[fast] != 0){
          let temp = nums[slow];
          nums[slow] = nums[fast];
          nums[fast] = temp;
          slow ++;
      }
  }
  return nums;
};
const res = applyOperations(nums);
console.log("结果为: ", res);
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55