找出列表中第n小的数(当K大于列表元素长度时,返回列表中最小的数 k=1,其他情况下N由用户指定)JAVA
时间: 2024-09-19 11:17:43 浏览: 31
Python找出最小的K个数实例代码
5星 · 资源好评率100%
在Java中,找出列表中第n小的数可以使用优先队列(PriorityQueue)或者快速选择算法(QuickSelect)。这里给出一种使用优先队列的方法:
```java
import java.util.*;
public class FindNthSmallestNumber {
public static int findNth(int[] nums, int n) {
if (nums == null || n <= 0 || n > nums.length) {
throw new IllegalArgumentException("Invalid input");
}
PriorityQueue<Integer> minHeap = new PriorityQueue<>((a, b) -> a - b);
for (int num : nums) {
minHeap.offer(num);
if (minHeap.size() > n) {
minHeap.poll();
}
}
return minHeap.peek(); // 返回第n小的数,如果n等于数组长度,则返回最小数
}
public static void main(String[] args) {
int[] nums = {4, 2, 9, 6, 23, 12};
int n = 3; // 或者你想找第k小的数,这时n > nums.length
try {
int nthSmallest = findNth(nums, n);
System.out.println("The " + n + "th smallest number is: " + nthSmallest);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
```
在这个例子中,我们首先检查输入是否有效。然后,我们将列表元素放入优先队列,保证堆顶总是当前已排序的部分中最小的元素。当我们达到目标大小n时,堆顶就是我们要找的第n小的数。
如果你想要处理K大于列表长度的情况,只需将`n`替换为`K`即可。
阅读全文