Top*_*der 6 algorithm data-structures
我正在寻找解决方案:
Given a array and a number P , find two numbers in array whose product equals P.
Run Code Online (Sandbox Code Playgroud)
寻找比O(n*2)更好的解决方案.我可以使用额外的空间或其他数据结构.任何帮助表示赞赏?
jbe*_*das 12
您可以尝试滑动窗口方法.首先对所有数字进行排序,然后使用两个整数begin并对end当前数字对进行索引.初始化begin为0并end到达最后一个位置.然后比较的产品v[begin],并v[end]用P:
begin前进.end向后移动.这是一个实现了这个想法的C++代码.由于排序,此解决方案为O(n*log(n)),如果您可以假设数据已排序,则可以跳过O(n)解决方案的排序.
pair<int, int> GetProductPair(vector<int>& v, int P) {
sort(v.begin(), v.end());
int begin = 0, end = static_cast<int>(v.size()) - 1;
while (begin < end) {
const int prod = v[begin] * v[end];
if (prod == P) return make_pair(begin, end);
if (prod < P) ++begin;
else --end;
}
return make_pair(-1, -1);
}
Run Code Online (Sandbox Code Playgroud)