给定一个长度为 n 的数组,从小到大输出任何至少出现三次的值,如果没有这样的值,则打印 -1。
时间: 2024-02-09 15:10:16 浏览: 177
好的,这是一个很简单的问题,可以使用哈希表来解决。我们可以遍历数组,将每个元素的出现次数记录在哈希表中。然后再遍历哈希表,找到出现次数大于等于3的元素并输出即可。如果没有这样的元素,则输出-1。
下面是代码示例(使用 Python 语言实现):
```python
def find_triplets(arr):
freq = {} # 哈希表,用于记录每个元素的出现次数
for num in arr:
freq[num] = freq.get(num, 0) + 1 # 使用 get() 方法获取元素出现次数,如果没有则默认为0
found = False
for num, count in freq.items():
if count >= 3:
print(num)
found = True
if not found:
print(-1)
# 测试
arr = [1, 2, 3, 4, 5, 6, 3, 3, 4, 4]
find_triplets(arr) # 输出 3 和 4
```
希望对你有帮助!
相关问题
给定一个长度为 n 的数组,从小到大输出任何至少出现三次的值,如果没有这样的值,则打印 -1。 输入格式 第一行包含整数 t (1 ≤ t ≤ 104)表示测试用例的数量。 每组测试用例的第一行包含一个整数 n (1 ≤ n ≤ 2⋅105)表示数组的长度。 每组测试用例的第二行包含 n 个整数 a1,a2,...,an (1 ≤ ai ≤ n)。 保证测试用例所有 n 的和不超过 2⋅105. 输出格式 对于每组测试用例,按从小到大输出至少出现三次的任何值,如果没有此类值,则打印 -1。
好的,这是一个稍微复杂一些的问题,需要用到计数排序和桶排序的思想。具体步骤如下:
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)
```
希望对你有帮助!
题目描述 给定大小为N(0<N<1000),从小到大排列的整数数组A[],以及待插入的整数X。试将整数X插入数组中的合适位置以保持数组有序性。 输入格式 第一行 数组大小 N 第二行 数组A[] 第三行 带插入的整数X 输出格式 输出:整数X在新数组中第一次出现的位置。
这道题目要求你在已排序的整数数组 `A[]` 中找到一个合适的位置,将给定的整数 `X` 插入,使得插入后的数组仍然按照升序排列。数组 `A[]` 的长度 `N` 是固定的,且满足 `0 < N < 1000`。数组中的元素是从小到大排列的。
**输入说明:**
- 第一行包含一个整数 `N`,表示数组的大小。
- 第二行包含 `N` 个空格分隔的整数,构成数组 `A[]`。
- 第三行包含一个整数 `X`,表示要插入的数。
**输出说明:**
- 输出一个整数,表示在新数组中 `X` 应该被插入的位置,以便保持整个数组的升序排列。如果 `X` 已经在数组中,返回它的索引;如果 `X` 应当放在数组的开头,输出 `1`;如果 `X` 应当放在数组的末尾,输出 `N + 1`(因为在 C++ 中数组的下标从 0 开始,所以最后一个元素的下标是 `N - 1`)。
这是一个经典的查找问题,你可以使用线性搜索遍历数组,每遇到比 `X` 小的元素就加一,直到找到第一个大于等于 `X` 的元素或到达数组末尾。如果遍历完都没找到合适位置,则应将 `X` 放在数组末尾,因此输出 `N + 1`。
```cpp
#include<iostream>
using namespace std;
int findInsertionPosition(int A[], int N, int X) {
for (int i = 0; i < N; ++i) {
if (A[i] >= X) {
return i + 1; // 返回下一个适合插入的位置
}
}
return N + 1; // 如果 X 比所有元素都大,返回末尾位置
}
int main() {
int N;
cin >> N;
int A[N];
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
int X;
cin >> X;
int position = findInsertionPosition(A, N, X);
cout << "X should be inserted at position " << position << endl;
return 0;
}
```
阅读全文