题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是规定美丽数组的定义是,长度为偶数,且下标为偶数的数值与其后一位的数值不能相同,要求把给定数组改成美丽数组的最小删除字符数。

思路分享

  • 先满足下标偶数数值与后一位不同的条件,这个只要用栈模拟遍历数组,一旦栈的长度达到偶数,下一个数值就排除同栈顶的元素值即可。

  • 那么长度为偶数的条件呢,可以在遍历结束后,如果最后数组长度为奇数,直接去掉栈顶即可。由于前面都满足条件二,去掉末尾元素不会违反其它条件。

  • 看下来,本题实际上不需要真的做出一个栈,毕竟加入元素的过程与栈顶之前的元素没有任何关系,所以只要记录栈顶和栈的长度即可。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def minDeletion(self, nums: List[int]) -> int:
index = 0
last_num = -1 #栈顶
for x in nums:
if index % 2 == 1 and last_num == x:
index -= 1
last_num = x
index += 1

if index % 2 == 1:
index -= 1

return len(nums)-index