如何解决尝试对数组中的 int 进行排名时时间超过
我有以下任务。读取多个对象并打印读取的第一个对象的排名。对象 o 在集合 S 中的排名是大于该对象的对象数量加一:
R(o,S) = |{e ∈ S | e > o}| + 1
例如,如果给定七个数字,说 S = {4,1,2,5,3,6}
,作为输入,第一个数字 4 的排名是 3,即 R(4,S) = 3
,因为有两个数字(5 和 6)大于 4。
我想我必须弄清楚输入是int还是string,所以在main中我使用if。但它使重复可能导致时间超过。我相信代码的逻辑部分是正确的 - 输出可能是正确的。
这是我的代码:
template <class T>
class RankingBag {
vector<T> v;
int val;
public:
RankingBag(): val(1) {}
void Pushback(T obj);
T Elem(int i);
int Ranking(T obj);
void clear() {
v.clear();
}
};
template <class T>
void RankingBag<T>::Pushback(T obj) {
v.push_back(obj);
}
template <class T>
T RankingBag<T>::Elem(int i) {
return v[i];
}
template <class T>
int RankingBag<T>::Ranking(T obj) {
for (int i =1;i<v.size();i++) {
if (v[i] > obj) {
vaL++;
}
}
return val;
}
int main() {
string s;
while (1) {
getline(cin,s);
if (isdigit(s.back())) {
RankingBag<int> r;
string ss;
istringstream ins(s);
while (ins >> ss) {
int n;
stringstream plz;
plz << ss;
plz >> n;
r.Pushback(n);
}
int num;
num = r.Elem(0);
cout << r.Ranking(num) << endl;
r.clear();
}
else {
RankingBag<string> r;
string ss;
istringstream ins(s);
while (ins >> ss) {
r.Pushback(ss);
}
ss = r.Elem(0);
cout << r.Ranking(ss) << endl;
r.clear();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。