📅  最后修改于: 2023-12-03 15:41:56.216000             🧑  作者: Mango
在一个已排序的连续元素数组中,找出仅重复出现的元素并计数。例如,数组 [1, 2, 2, 3, 4, 4, 4, 5, 5] 中仅重复出现的元素为 2 和 4,它们分别出现了两次和三次,因此需要返回 [2, 3, 4, 3]。
根据题目要求,我们需要统计连续元素数组中仅重复出现的元素。因此,我们需要遍历数组并分析每个元素以及它前后的元素是否相等,以确定该元素是否仅重复出现一次。
同时,考虑到数组已排序,我们可以利用这一特性来优化算法。具体来说,我们可以利用两个指针 i 和 j,分别指向数组中的相邻元素。如果 a[i] == a[j],说明元素 a[i] 出现了两次,可以将计数器加 1;否则,如果计数器大于 1,说明元素 a[i-1] 是重复出现的元素之一,将其计入结果数组中,并将计数器重置为 1。
以下是 Python 代码实现:
def count_duplicates(nums):
res = []
count = 1
for i in range(1, len(nums)):
if nums[i] == nums[i-1]:
count += 1
else:
if count > 1:
res.append(nums[i-1])
res.append(count)
count = 1
if count > 1:
res.append(nums[-1])
res.append(count)
return res
以下是该代码的解释:
定义结果数组 res
和计数变量 count
。
遍历数组元素,从第二个元素开始。
如果当前元素与前一个元素相等,将计数器加 1。
否则,如果计数器大于 1,说明前一个元素是重复元素之一,将其加入结果数组中,并将计数器重置为 1。
如果最后一个元素也是重复元素之一,需要将其加入结果数组中。
返回结果数组 res
。
通过利用数组已排序的特性,我们可以在一次遍历中统计两个相邻元素的重复次数,并记录重复元素的个数和计数。该算法的时间复杂度为 O(n),空间复杂度为 O(1)。