数组子元素如果相同就相加
时间: 2025-06-22 20:42:22 浏览: 12
### 实现数组中相同元素相加
对于给定的一个数组,如果其中存在多个相同的元素,可以通过遍历该数组并将这些重复项合并成单个条目,其值等于原始数值之和。下面展示了一种基于Python语言的具体实现方式:
#### 方法一:利用字典统计
这种方法通过创建一个临时字典`counter`来记录各个不同元素及其累积次数;最后再把处理过的数据转换回列表形式返回。
```python
def sum_duplicates_with_dict(arr):
counter = {}
for num in arr:
if num not in counter:
counter[num] = 0
counter[num] += num
result = []
for key, value in counter.items():
result.append(value)
return result
```
此段代码首先初始化了一个空字典用于存储每一种唯一数目的总合。接着迭代输入参数arr里的每一个成员num,并更新对应位置上的计数值。最终构建一个新的列表result保存所有不重复项目的累加结果并予以输出[^1]。
#### 方法二:先排序后聚合
另一种思路是对原序列执行一次稳定性的排序操作(如归并排序),使得具有相同值得项目相邻排列在一起,之后只需简单地线性扫描一遍即可完成累加工作。
```python
from collections import defaultdict
def sum_duplicates_sorted(arr):
sorted_arr = sorted(arr) # 使用内置sorted()函数,默认采用Timsort算法,它是稳定的
# 这里也可以替换为其他任何已知的稳定性排序方案,比如merge sort
summed_list = []
current_sum = None
prev_item = None
for item in sorted_arr:
if item != prev_item and prev_item is not None:
summed_list.append(current_sum)
if current_sum is None or item == prev_item:
if current_sum is None:
current_sum = 0
current_sum += item
prev_item = item
if current_sum is not None:
summed_list.append(current_sum)
return summed_list
```
上述程序片段先是调用了系统的标准库实现了对传入整型向量arr的一次升序整理过程。随后定义两个辅助变量current_sum以及prev_item分别用来追踪当前连续子串内的累计总量还有上一轮循环遇到的那个特定对象。每当发现新旧两轮所指代的对象发生变化时就立即将前者加入到待返还的结果集中去。当整个流程结束之际还需额外检查最后一次形成的分组是否已经被计入答案之中[^2]。
阅读全文
相关推荐


















