解题思路: 输入有三个值:n 表示酒店数量,k 表示需要找出离目标价格最接近的 k 个酒店价格,x 表示目标价格。 将酒店价格数组 A 转换为元组 (差值, 酒店价格) 的形式,方便后续操作。 使用 Python 的 heapq.nsmallest 方法从生成的差值列表中获取差值最小的 k 个元素。 取出这些元素对应的酒店价格,并将它们排序后输出,确保结果按从小到大的顺序排列。
import heapq
# 读取输入数据
n, k, x =map(int,input().split())# n 为酒店数量,k 为需要找出的酒店数量,x 为目标价格
A =list(map(int,input().split()))# A 为酒店价格列表# 计算差值并存储元组 (差值, 酒店价格),用于后续查找最近的酒店
arr =[(abs(a - x), a)for a in A]# 从堆中获取 k 个最小差值的酒店价格
closest_hotels = heapq.nsmallest(k, arr)# 提取酒店价格并按升序排序
result =sorted(h[1]for h in closest_hotels)# 输出结果print(" ".join(map(str, result)))
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
java解法
解题思路
输入解析:首先读取输入的三个值:n(酒店数量),k(需要找出的酒店数量),x(目标价格)。然后读取酒店价格列表。 优先队列排序:通过一个优先队列(PriorityQueue)来存储每个酒店的价格和与目标价格 x 的差值。优先队列会按照差值(绝对值)进行排序,如果差值相同,则根据价格进行排序。 找出前 k 个最接近的酒店价格:使用优先队列的 poll 方法从队列中取出前 k 个最接近的酒店价格。 排序输出:将结果按价格升序排序并输出,确保符合题目要求。
importjava.util.*;publicclassMain{publicstaticvoidmain(String[] args){// 创建Scanner对象用于读取输入Scanner sc =newScanner(System.in);// 读取输入的n, k, x,分别表示酒店数量、需要找出的酒店数量和目标价格int n = sc.nextInt();int k = sc.nextInt();int x = sc.nextInt();// 创建一个优先队列,存储由两部分组成的数组:价格和与目标价格x的差值// 优先队列根据差值(绝对差)进行排序,如果差值相同,则根据价格进行排序PriorityQueue<int[]> queue =newPriorityQueue<>((a, b)->
a[1]!= b[1]? a[1]- b[1]: a[0]- b[0]);// 读取每个酒店的价格,并将价格和其与目标价格的差值存入优先队列for(int i =0; i < n; i++){int price = sc.nextInt();
queue.offer(newint[]{price,Math.abs(price - x)});// 将价格和差值作为数组存入队列}// 创建一个List来存储前k个最接近目标价格的酒店价格List<Integer> result =newArrayList<>();// 从优先队列中取出前k个最接近的酒店价格for(int i =0; i < k; i++){
result.add(queue.poll()[0]);// 取出酒店价格并加入到结果列表}// 对结果列表进行排序,确保输出的价格按升序排列Collections.sort(result);// 输出最终结果,以空格分隔酒店价格for(int price : result){System.out.print(price +" ");}}}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: