给定向量矢量,是否有最佳方法来确定保持全局最小值的向量索引? 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;
}
答案 0 :(得分:0)
由于矢量和矢量中的数字都不是排序,因此您必须检查每个数字是否为最小值。 因此,你会得到 O(n)的复杂性。
你可以像你一样使用迭代器,或者只使用2 for循环并使用[i] [j]访问向量(由于迭代器缺少开销,它应该更快一点)。
另外 - 由于你只有unsigned int,你可以在找到0后立即中断。