📌  相关文章
📜  计数每次删除后剩余的成对相等数组元素(1)

📅  最后修改于: 2023-12-03 15:27:57.566000             🧑  作者: Mango

计数每次删除后剩余的成对相等数组元素

有一个由数字组成的数组,每次可以将相等的两个数同时删除,直到数组中没有相等的数为止。编写一个函数来计算每次删除操作后剩余的成对相等数组元素个数。以下是示例输入和输出。

示例输入输出
输入
nums = [1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1]
输出
9
思路

使用一个栈来记录数组中的数字,当遍历到一个数字时,如果栈为空或者栈顶的数字和这个数字不相等,则将这个数字压入栈中,否则弹出栈顶数字。

在弹出数字时,如果弹出的数字是和前一个数字相等的,则将计数器加1,否则不加。

最后计算出现了多少次成对删除操作即可,即计数器除以2的整数部分。

代码实现
def count_pairs(nums):
    stack = []
    count = 0
    for num in nums:
        if not stack or stack[-1] != num:
            stack.append(num)
        else:
            stack.pop()
            if count > 0 and num == nums[nums.index(num)-2]:
                count += 1
            else:
                count += 2
    return count // 2
测试
assert count_pairs([1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1]) == 9
assert count_pairs([1,1,2,2,3,3,4,4]) == 4
assert count_pairs([1,1,1,1,1]) == 2
assert count_pairs([1,2,3,4,5,6,7,8]) == 0