N个整数的非空零索引向量V,返回V中不出现的最小正整数(大于0)

时间:2016-06-09 06:37:50

标签: c++ c++11

请帮我优化代码。对于大多数结果集来说似乎工作得很好,但性能方面似乎很慢。如何进一步优化代码。 假设vector是v {1,3,6,4,1,2};

INVOICE/INVOICE_ITEM_LIST/INVOICE_ITEM/PRODUCT_FEATURES/FEATURE/FVALUE

2 个答案:

答案 0 :(得分:0)

首先,您的代码修改了原始向量,这可能是不可取的。

接下来像往常一样,在代码优化之前考虑算法。一旦矢量被排序,找到第一个正数。如果不是1,1则是解决方案。

如果您在排序后的矢量中找到了数字1,只需前进:

  • 如果下一个数字是数字+ 1,则只需迭代
  • 如果下一个号码是>数字+ 1,解决方案是数字+ 1
  • 如果到达向量的末尾,则解决方案是向量+ 1
  • 中的最后一个数字

成本:排序成本加上最坏情况下的N,平均N / 2

答案 1 :(得分:0)

编辑:以下代码允许以线性时间计算答案,而不是涉及排序的算法。首先注意答案小于或等于#!/bin/bash echo "FILE CREATED: $1" >> /home/xxx/watch_dir.log ,其中N是V的大小。 因此,让我们创建一个长度为N+1 N+1的向量,并遍历vector<int> count(N+1)中的所有值,以便V中的v使{ {1}}我们增加V。最后遍历v<N+1中的所有值并返回大于0的第一个非零索引。如果所有值都大于零,则返回count[v]++

count