题目来源:
leetcode题目,网址:2460. 对数组执行操作 - 力扣(LeetCode)
解题思路:
模拟操作操作数组即可。
解题代码:
class Solution {
public int[] applyOperations(int[] nums) {
for(int i=0;i<nums.length-1;i++){
if(nums[i]==nums[i+1]){
nums[i]=nums[i]*2;
nums[i+1]=0;
i++;
}
}
for(int i=0,j=0;i<nums.length && j<nums.length;i++){ //i 指向0
while(i<nums.length && nums[i]!=0){
i++;
}
j=i+1;
while(j<nums.length && nums[j]==0){
j++;
}
if(j<nums.length){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
return nums;
}
}
总结:
官方题解也是模拟的思路,不过他在第一步判断 nums[i] 和 nums[i+1] 是否相等时就插入对数组元素是否为 0 的判断。题目中不是表明了 操作应当依次有序执行,而不是一次全部执行。