微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试对数组中的 int 进行排名时时间超过

如何解决尝试对数组中的 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。

there is entire problem

我想我必须弄清楚输入是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 举报,一经查实,本站将立刻删除。