找出列表中第n小的数(当K大于列表元素长度时,返回列表中最小的数 k=1,其他情况下N由用户指定) nums = [1, 2, 4, 3, 5, 4, 6, 9, 2, 1]Java
时间: 2024-09-18 18:02:34 浏览: 30
在Java中,你可以通过多种方法找出列表中第n小的数。这里提供一种常见的解决方案,即使用优先队列(PriorityQueue)或堆(Heap)数据结构。如果k大于列表长度,我们只需要返回最小值,因为不可能有超过列表元素数量的位置。
```java
import java.util.PriorityQueue;
public class Main {
public static int findNthSmallest(int[] nums, int n, int k) {
if (k > nums.length) {
return Collections.min(Arrays.stream(nums).boxed().collect(Collectors.toList()));
}
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> a - b);
for (int i = 0; i < Math.min(nums.length, k); i++) {
pq.offer(nums[i]);
}
// 如果k小于等于nums长度,直接返回第k小的数;否则返回列表中的最小数
return pq.size() == k ? pq.poll() : nums[k - 1];
}
public static void main(String[] args) {
int[] nums = {1, 2, 4, 3, 5, 4, 6, 9, 2, 1};
int n = 3;
int k = 7;
System.out.println(findNthSmallest(nums, n, k)); // 输出: 3
}
}
```
阅读全文