1. 问题描述:
给定一个包含 n 个整数的数组 a1,a2,…,an。请你从中找出 k 个元素,并要求找出的元素值两两不同。
输入格式
第一行包含两个整数 n,k。第二行包含 n 个整数 a1,a2,…,an。
输出格式
如果无法找出满足条件的 k 个数,则输出一行 NO。否则,第一行输出 YES,第二行输出范围在 [1,n] 的 k 个不同的数,表示你找出的 k 个元素的下标。元素下标 1∼n。输出下标顺序随意,任意合理方案均可。
数据范围
前三个测试点满足,1 ≤ k ≤ n ≤ 5。
所有测试点满足,1 ≤ k ≤ n ≤ 100,1 ≤ ai ≤ 100。
输入样例:
5 3
15 13 15 15 12
输出样例:
YES
1 2 5
来源:https://www.acwing.com/problem/content/description/3991/
2. 思路分析:
分析题目可以知道我们可以将所有出现过的数字存储到哈希表中,在枚举数字放到哈希表中的过程其实也是去掉重复数字的过程,最终判断哈希表的长度是否小于k,如果小于k则无解,否则输出前k个元素的下标即可。
3. 代码如下:
class Solution:
def process(self):
n, k = map(int, input().split())
a = list(map(int, input().split()))
mp = dict()
for i in range(n):
x = a[i]
mp[x] = i + 1
if len(mp) < k:
print("NO")
else:
print("YES")
for v in mp.values():
print(v, end=" ")
k -= 1
if k == 0: break
if __name__ == '__main__':
Solution().process()