在java中搜索多个min
我是java的新手。我在java中搜索很多min时遇到问题。 我有一个大数据。但是像这样的例子数据在java中搜索多个min,java,arrays,Java,Arrays,我是java的新手。我在java中搜索很多min时遇到问题。 我有一个大数据。但是像这样的例子数据 k[][] = [74 85 123 73 84 122 72 83 121 70 81 119 69 80 118 76 87 125 77 88 126
k[][] = [74 85 123
73 84 122
72 83 121
70 81 119
69 80 118
76 87 125
77 88 126
78 89 127];
min1 = 69 min1 = 80 min1 = 118
min2 = 70 min2 = 81 min2 = 119
min3 = 72 min3 = 83 min3 = 121
我想要这样的输出
k[][] = [74 85 123
73 84 122
72 83 121
70 81 119
69 80 118
76 87 125
77 88 126
78 89 127];
min1 = 69 min1 = 80 min1 = 118
min2 = 70 min2 = 81 min2 = 119
min3 = 72 min3 = 83 min3 = 121
我在这些数据中使用排序,但结果并不有效。
有人帮帮我吗
thx假设您的数据有N行和M列
O(n)空间,O(MNlg(n))时间这里是一个使用助手类查找最低X整数的通用实现 对于三列,将创建helper类的三个实例,然后迭代数据以收集每列的三个最低值 此代码的优点是:
- 仅保留最低的X值
- 不需要对整数进行装箱
- 使用二进制搜索提高X值较高时的性能
import java.util.Arrays;
class Ideone {
private static final int MIN_COUNT = 3;
public static void main(String[] args) {
int[][] data = { { 74, 85, 123 },
{ 73, 84, 122 },
{ 72, 83, 121 },
{ 70, 81, 119 },
{ 69, 80, 118 },
{ 76, 87, 125 },
{ 77, 88, 126 },
{ 78, 89, 127 } };
// Initialize min collectors
Min[] min = new Min[data[0].length];
for (int col = 0; col < min.length; col++)
min[col] = new Min(MIN_COUNT);
// Collect data
for (int row = 0; row < data.length; row++)
for (int col = 0; col < min.length; col++)
min[col].add(data[row][col]);
// Print result
for (int i = 0; i < MIN_COUNT; i++) {
for (int col = 0; col < min.length; col++)
System.out.printf("min%d = %-5d ", i + 1, min[col].get(i));
System.out.println();
}
}
}
class Min {
private int[] min;
public Min(int count) {
this.min = new int[count];
Arrays.fill(this.min, Integer.MAX_VALUE);
}
public void add(int value) {
int idx = Arrays.binarySearch(this.min, value);
if (idx != -this.min.length - 1) { // not insert at end
if (idx < 0)
idx = -idx - 1;
System.arraycopy(this.min, idx, this.min, idx + 1, this.min.length - idx - 1);
this.min[idx] = value;
}
}
public int get(int index) {
return this.min[index];
}
}
导入java.util.array;
表意文字{
私有静态最终整数最小计数=3;
公共静态void main(字符串[]args){
int[]data={{74,85,123},
{ 73, 84, 122 },
{ 72, 83, 121 },
{ 70, 81, 119 },
{ 69, 80, 118 },
{ 76, 87, 125 },
{ 77, 88, 126 },
{ 78, 89, 127 } };
//初始化最小收集器
Min[]Min=新的Min[数据[0]。长度];
用于(int col=0;col
对不起,我不知道你在问什么。你能澄清你面临的问题吗?你说的“结果没有效率”是什么意思?你是想在每列中找到三个最小的元素吗?@PM77-1我想OP需要什么,但他的数据结构和问题有点不清楚。你可以使用树形图吗?是的,我想在每列中找到三个小元素。这段代码很好。但如果我有数据是双精度不是整数?怎么做?@swatzz你是认真的吗?