包含全局最小值的向量索引

时间:2018-05-30 23:58:22

标签: c++ algorithm c++11 stdvector

给定向量矢量,是否有最佳方法来确定保持全局最小值的向量索引? Big-O表示法的复杂性是什么?

#include <algorithm>
#include <iostream>
#include <vector>

unsigned getMinimumIndex(std::vector<std::vector<unsigned>> const& a) {

  if (!a.size())
    return 0;

  unsigned ret = 0; unsigned temp; unsigned global = 1 << 31;
  for (std::size_t idx = 0; idx < a.size(); ++idx) {
    if ((temp = *std::min_element(std::begin(a[idx]), std::end(a[idx]))) < global) {
      global = temp;
      ret = idx;
    }
  }
  return ret;
}

int main() {
  std::vector<std::vector<unsigned>> a = {{2, 4, 6, 8}, {3, 9, 5, 7},
                                          {3, 4, 4, 3}, {2, 8, 3, 2},
                                          {4, 4, 4, 0}, {1, 2, 3, 4}};
  std::cout << getMinimumIndex(a);  // 4-th vector posseses the value '0'
  return 0;
}

1 个答案:

答案 0 :(得分:0)

由于矢量和矢量中的数字都不是排序,因此您必须检查每个数字是否为最小值。 因此,你会得到 O(n)的复杂性。

你可以像你一样使用迭代器,或者只使用2 for循环并使用[i] [j]访问向量(由于迭代器缺少开销,它应该更快一点)。

另外 - 由于你只有unsigned int,你可以在找到0后立即中断。