假设我有一个3x6的双打数组:
double [] [] arr =
[1.2, 1, 1]
[4.3, 1 , 1]
[2.0, 1 , 1]
[2.9, 1 , 1]
[6.2, 1 , 1]
[2.5, 1 , 1]
我想基于 仅第一列 的公差x <3.0来返回数组。
这将返回完整数组减去与条件不匹配的行(x <3.0):
即
double [] [] returnArr =
[1.2, 1, 1]
[2.0, 1 , 1]
[2.9, 1 , 1]
[2.5, 1 , 1]
什么是实现这一目标的有效方法(运行时间是一个问题)???
答案 0 :(得分:3)
由于您的数组未根据其[0]元素进行排序,因此 最有效的方法是O(N),即遍历所有的 数组(假设它们的数量是N)并测试它们的条件。
以下是一些示例代码。
import java.util.ArrayList;
import java.util.Arrays;
public class Test011 {
private static double[][] arr = new double[][]{
{1.2, 1, 1},
{4.3, 1 , 1},
{2.0, 1 , 1},
{2.9, 1 , 1},
{6.2, 1 , 1},
{2.5, 1 , 1}
};
private static double[][] filter(double[][] d, double num){
ArrayList<double[]> lst = new ArrayList<double[]>();
for (int i=0; i<d.length; i++){
if (d[i][0] < num){
lst.add(d[i]);
}
}
double[][] result = new double[lst.size()][];
return lst.toArray(result);
}
public static void main(String[] args) {
double[][] a = filter(arr, 3.0);
System.out.println(Arrays.deepToString(arr));
System.out.println(Arrays.deepToString(a));
}
}