给定一个长度为 n 的数组,从小到大输出任何至少出现三次的值,如果没有这样的值,则打印 -1。 输入格式 第一行包含整数 t (1 ≤ t ≤ 104)表示测试用例的数量。 每组测试用例的第一行包含一个整数 n (1 ≤ n ≤ 2⋅105)表示数组的长度。 每组测试用例的第二行包含 n 个整数 a1,a2,...,an (1 ≤ ai ≤ n)。 保证测试用例所有 n 的和不超过 2⋅105. 输出格式 对于每组测试用例,按从小到大输出至少出现三次的任何值,如果没有此类值,则打印 -1。
时间: 2024-02-09 19:10:17 浏览: 50
我们第一行包括两个整数n,k(1<=n<=100,k<=6e5),表示有n个数字,目标和为k 第二行输入n个整数(c1 c2
好的,这是一个稍微复杂一些的问题,需要用到计数排序和桶排序的思想。具体步骤如下:
1. 对数组进行计数排序,将每个数出现的次数记录在一个长度为 n 的计数数组 count 中。
2. 对计数数组 count 进行桶排序,按照出现次数从小到大排序。桶排序的过程可以使用一个桶数组 bucket,其中每个桶 bucket[i] 存储出现次数为 i 的数。
3. 遍历桶数组,如果一个桶 bucket[i] 中至少有三个数,则输出其中任意三个即可。如果没有这样的数,则输出 -1。
下面是代码示例(使用 Python 语言实现):
```python
def find_triplets(arr):
n = len(arr)
count = [0] * (n + 1) # 计数数组,用于记录每个数出现的次数
for num in arr:
count[num] += 1
bucket = [[] for _ in range(n + 1)] # 桶数组,用于记录出现次数相同的数
for i in range(1, n + 1):
bucket[count[i]].append(i)
found = False
for i in range(3, n + 1):
if bucket[i]:
print(*bucket[i][:3]) # 输出任意三个数
found = True
break
if not found:
print(-1)
# 测试
t = int(input())
for _ in range(t):
n = int(input())
arr = list(map(int, input().split()))
find_triplets(arr)
```
希望对你有帮助!
阅读全文