【发布时间】:2022-01-15 12:57:16
【问题描述】:
目标是从给定的整数数组中返回所有相差为 2 的整数对。结果数组应按值的升序排序。假设数组中没有重复的整数。输入数组中整数的顺序无关紧要。
我的代码在这里:
#include <utility>
#include <bits/stdc++.h>
#include <vector>
using namespace std;
std::vector<std::pair<int, int>> twos_difference(const std::vector<int> &vec) {
vector <int> v1 = vec;
vector <pair<int,int>> pairs;
sort(v1.begin(),v1.end(), greater<int>());
for (size_t i=0; i<vec.size()-1; i++){
pair <int,int> due;
for (size_t j=1; j<vec.size(); j++){
if (v1[i] - v1[j] == 2){
due.first = v1[j];
due.second = v1[i];
pairs.push_back(due);
break;
}
}
}
sort(pairs.begin(),pairs.end());
return pairs;""
}
执行超时(12000 毫秒)为什么??????
【问题讨论】:
-
您的解决方案是
O(n^2)
。有一个解决方案是O(n log n)
。想一个不同的算法来解决这个问题。 -
为什么要检查所有元素对(在对输入向量进行排序之后)?当它们的差为 2 时,两个元素可以相距多远?无论如何,“执行超时”似乎来自某些在线法官。为什么?因为我猜你的代码花费了太多时间
-
这里只是一个初学者:(
-
你几乎拥有它。对项目进行升序而不是降序排序,然后使内部循环从外部循环的索引开始迭代,直到差值大于 2,然后跳出内部循环,放置一对恰好相差 2 的对(如果有一个) .您需要决定是否输出相同对的多个副本,如果有多个副本,则它们之间用两个分隔,或者您只需要唯一的对。
标签: c++ performance time