求删除循环列表中所有元素的最大和最小操作次数

问题描述 投票:0回答:1

在长度为n的循环列表中,其中a1与a2相邻,a2与a3相邻,an与a1相邻。每次操作只能删除一个数字,每次删除后,如果存在相邻的相等的数字,则自动删除其中一个,直到列表中没有相邻的相等的数字为止。

例如,考虑一个循环列表 [1, 2, 3, 2]。如果我们删除数字 3,相邻的 2 之一将被自动删除,结果是 [1, 2]。如果我们删除数字 2,则列表将变为 [1]。最后删除1,操作次数为3,因为不包括自动删除。

我想知道删除循环列表中所有元素所需的最大和最小操作次数。有哪些方法或算法可以用来有效地解决这个问题? Java 代码更好。

java list algorithm dynamic-programming greedy
1个回答
0
投票

好吧,我的做法是用一个map来记录每个数字出现的次数。如果有一个数字只出现一次或者总共至少有三个不同的数字,我将返回数组的长度。否则,如果场景类似于“1 2 1 2 1 2 1 2”,我将返回数组的长度除以2加1(每次删除都会触发自动删除,长度减少2;当长度达到2、可以进行两次删除)。但我想知道这是否正确以及如何证明它。

© www.soinside.com 2019 - 2024. All rights reserved.