使用2D数组中的索引获取5个最低值

时间:2015-07-02 18:08:22

标签: java multidimensional-array processing

如何从2D阵列获取5个最小数字的任何想法。我也想知道他们的索引。我正在使用Processing,但我很想找到正确的方法。

例如:我有一个4x4数组,其中包含以下值:

var pws = [
    "%5abCdefg",
    "&5ab",
    "%5abCdef",
    "5Bcdwefg",
    "BCADLKJSDSDFlk"
];

function pwCheck(pw) {
    var criteria = 0;
    if (pw.toUpperCase() != pw) {
        // has lower case letters
        criteria++;
    }
    if (pw.toLowerCase() != pw) {
        // has upper case letters
        criteria++;
    }
    if (/^[a-zA-Z0-9]*$/.test(pw) === false) {
        // has special characters
        criteria++;
    }
    if (/\d/.test(pw) === true) {
        // has numbers
        criteria++;
    }
    // returns true if 3 or more criteria was met and length is appropriate
    return (criteria >= 3 && pw.length >= 8 && pw.length <= 16);
}

pws.forEach(function(pw) {
    console.log(pw + ": " + pwCheck(pw).toString());
});

我想得到我的数组中最低的五个数字3,4,7,9,12。问题是我也想知道他们的原始索引。

示例:

 3-72-64-4 
 12-45-9-7 
 86-34-81-55 
 31-19-18-21 

有没有任何公式或良好的编程方式呢?

2 个答案:

答案 0 :(得分:3)

实际上有一种非常好的做法适合你的情况。它称为合并排序算法&#39;。它会对您的值进行排序,然后您只需要输出前5个值。这是link specifically for java。有乐趣编码和测试它!我做了:D

答案 1 :(得分:3)

很明显,你可以通过2循环来循环通过它和暴力。获得原始索引会变得更难,因为那时你不能使用更快的排序。如果它是排序的或者是否存在某种模式,你可以使用搜索(二进制搜索),但是从你给出的内容开始,因为看起来数据是随机的,你真的不能做太多。

如果您不关心索引,可以尝试排序,例如ERed提到的合并排序或其他类型的排序(我更喜欢quickSort)。基本上你将2D数组视为一维数组,并假设每个后续级别只是前一级别的延续(基本上它只是一个巨大的行分成几部分)。