📌  相关文章
📜  从增加的相邻数组元素对中重复删除一个元素后,找到最后剩余的元素(1)

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

从增加的相邻数组元素对中重复删除一个元素后,找到最后剩余的元素

这是一个典型的栈的应用场景,使用栈可以轻松地解决这个问题。

思路
  1. 定义一个栈,遍历输入的数组,依次将数组元素压栈;
  2. 每当栈顶元素和当前元素相等时,将栈顶元素弹出,不压入当前元素;
  3. 最后栈中剩下的就是答案。
代码实现
def find_last_remaining(arr):
    stack = []
    for num in arr:
        if stack and stack[-1] == num:
            stack.pop()
        else:
            stack.append(num)
    return stack[-1] if stack else None
测试样例
assert find_last_remaining([1, 2, 2, 3, 4, 4, 3]) == 1
assert find_last_remaining([1, 1, 2, 3, 3, 4, 4]) == 2
assert find_last_remaining([1, 1, 2, 2]) is None
assert find_last_remaining([1, 2, 3, 4]) == 1
复杂度分析
  • 时间复杂度:$O(n)$,需要遍历整个数组。
  • 空间复杂度:$O(n)$,最坏情况下需要压入所有数组元素。