arrays - 识别一组数组中最小数据对应的索引

标签 arrays algorithm cursor

我相信这是一个微不足道的算法问题,但我似乎无法找到高效而优雅的解决方案。

我们有 3 个 int 数组(Aa、Ab、Ac)和 3 个游标(Ca、Cb、Cc),它们指示相应数组中的索引。我想识别并递增指向最小值的光标。如果这个游标已经在数组的末尾,我将排除它并增加指向第二小值的游标。如果只有 1 个游标不在数组的末尾,我们增加这个。

我能想到的唯一解决方案很复杂和/或不是最优的。例如,我总是以一个巨大的 if...else... 结束

有没有人看到这个问题的巧妙解决方案?

我正在使用 C++ 进行编程,但可以随意使用伪代码或您喜欢的任何语言进行讨论。

谢谢

最佳答案

伪java代码:

int[] values = new int[3];
values[0] = aa[ca];
values[1] = ab[cb];
values[2] = ac[cc];
Arrays.sort(values);

boolean done = false;
for (int i = 0; i < 3 && !done; i++) {
    if (values[i] == aa[ca] && ca + 1 < aa.length) {
        ca++;
        done = true;
    }
    else if (values[i] == ab[cb] && cb + 1 < ab.length) {
        cb++;
        done = true;
    }
    else if (cc + 1 < ac.length) {
        cc++;
        done = true;
    }
}
if (!done) {
    System.out.println("cannot increment any index");
    stop = true;
}

本质上,它执行以下操作:

  1. aa[ca]ab[cb]ac[cc]<初始化数组values/

  2. 排序

  3. 扫描 values 并在可能的情况下(即不在数组末尾)增加相应值的索引

我知道,排序最多是 O(n lg n),但我只对包含 3 个元素的数组进行排序。

关于arrays - 识别一组数组中最小数据对应的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5271285/

相关文章:

多维数组的Java序列化

c - 排序算法的问题

Java JLayeredPane 覆盖光标

android - sqlite 失败无法从警报服务中的游标读取游标窗口的第 0 行 col -1

sql - 使用另一个表中的值更新表

arrays - 在 O(n) 时间内检查两个子串是否重叠

arrays - 在 Ruby 哈希中创建动态键名?

python - Python 和 Django 中用于从包含 m 的文件中选择 n 个 JavaScript 函数的高效算法

c++ - '.' 在输出中意味着什么?

algorithm - 在渐近分析中,证明 :- O( f(n) + g(n) ) = O( max{ f(n) , g(n) } )