程序要求:给定由 nn 个数组成的数列,其中相邻的两个数字如果相同就可以相互消除,然后后面的数字按照顺序向前移动填补空位,填补之后如果依然出现相邻数字相同,则继续消除并移动,直至不存在能相互消除的数字为止。请写出代码
时间: 2024-06-01 11:12:08 浏览: 53
思路:使用一个栈来存储已经处理过的数字,遍历数列中的数字,如果栈为空或者栈顶数字与当前数字不同,则将当前数字压入栈中;否则,将栈顶数字弹出,直到栈为空或者栈顶数字与当前数字不同。最后将栈中的数字按照顺序输出即可。
代码实现:
def eliminate_duplicates(nums):
stack = []
for num in nums:
if not stack or stack[-1] != num:
stack.append(num)
else:
while stack and stack[-1] == num:
stack.pop()
return stack
# 示例
nums = [1, 2, 2, 3, 3, 3, 4, 4, 5]
result = eliminate_duplicates(nums)
print(result) # 输出 [1, 5]
相关问题
程序要求:给定由 nn 个数组成的数列,其中相邻的两个数字如果相同就可以相互消除,然后后面的数字按照顺序向前移动填补空位,填补之后如果依然出现相邻数字相同,则继续消除并移动,直至不存在能相互消除的数字为止。
示例:
输入:[1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5]
输出:[1, 4, 5]
解释:2 与 2 相邻消除,得到 [1, 3, 3, 3, 4, 4, 5, 5, 5, 5],3 与 3 相邻消除,得到 [1, 4, 4, 5, 5, 5, 5],4 与 4 相邻消除,得到 [1, 5, 5, 5, 5],5 与 5 相邻消除,得到 [1]。
算法:
我们可以使用栈来模拟相邻消除的过程。具体步骤如下:
- 遍历整个数列,将元素依次入栈。
- 每次向栈中加入一个新的元素时,判断其与栈顶元素是否相同,如果相同则将栈顶元素弹出,同时将新的元素丢弃。
- 遍历完整个数列后,栈中剩余的元素就是无法相邻消除的元素。
代码实现:
对于给定的一个字符串,统计其中数字字符出现的次数。要求:字符串只能由数字和字符组成。
对于给定的字符串,统计其中数字字符出现的次数可以使用编程语言中的正则表达式或者遍历字符串的方式。下面是一个简单的Python示例:
```python
def count_digits(s):
# 使用正则表达式匹配所有数字
import re
digits = re.findall(r'\d', s)
# 返回数字字符的数量
return len(digits)
# 示例
s = "abc123Hello456"
digit_count = count_digits(s)
print(f"字符串 '{s}' 中数字字符出现了 {digit_count} 次.")
```
如果你想要手动遍历字符串,也可以这样做:
```python
def count_digits(s):
count = 0
for char in s:
if char.isdigit(): # 检查字符是否为数字
count += 1
return count
s = "abc123Hello456"
digit_count = count_digits(s)
print(f"字符串 '{s}' 中数字字符出现了 {digit_count} 次.")
```