题目
给你一个下标从 0 开始的整数数组
nums
,如果满足下述条件,则认为数组nums
是一个 美丽数组 :
nums.length
为偶数- 对所有满足
i % 2 == 0
的下标i
,nums[i] != nums[i + 1]
均成立注意,空数组同样认为是美丽数组。
你可以从
nums
中删除任意数量的元素。当你删除一个元素时,被删除元素右侧的所有元素将会向左移动一个单位以填补空缺,而左侧的元素将会保持 不变 。返回使
nums
变为美丽数组所需删除的 最少 元素数目。
解题思路
- 首先对数组长度为1的特殊情况进行单独处理,即直接删除唯一元素;
- 创建变量表示删除元素次数,当前索引i(index)和下级索引i + 1(next);
- 通过while循环来遍历数组和对数组元素进行校验;
- 对删除元素后的数组进行判断是否为偶数,非偶数则需要再删除一个元素(首元素或尾元素,不影响原有数据结构);
代码展示
class Solution {public int minDeletion(int[] nums) {int n = nums.length;if(n == 1){return 1;}int deleteNum = 0;//index 表示i next表示i+1int index = 0;int next = 1;while (next < n){if(nums[index] == nums[next]){deleteNum++;next++;} else {index = next + 1;next += 2;}}return (n - deleteNum) % 2 == 0 ? deleteNum : deleteNum + 1;}
}