Rank:1177 / 3690 AC:3/4 力扣189
**

5412. 在既定时间做作业的学生人数

  1. class Solution {
  2. public:
  3. int busyStudent(vector<int>& startTime, vector<int>& endTime, int q) {
  4. int n = startTime.size(),res= 0 ;
  5. for(int i=0;i<n;i++){
  6. if(startTime[i]<=q&&q<=endTime[i]){
  7. res++;
  8. }
  9. }
  10. return res;
  11. }
  12. };

时间复杂度:O(n)

5413. 重新排列句子中的单词

实现一个稳定的排序,按照字符串长度大小来升序排序,注意处理开头的字符串。
这个是当时考场写的的版本。

  1. struct node{
  2. string s;
  3. int idx;
  4. node(string _s,int _idx){
  5. s = _s; idx = _idx;
  6. }
  7. };
  8. bool cmp(node *a,node *b){
  9. int lena = a->s.length() ,lenb = b->s.length();
  10. if(lena==lenb) return a->idx < b->idx;
  11. return lena < lenb;
  12. }
  13. class Solution {
  14. public:
  15. string arrangeWords(string text) {
  16. string s = "";
  17. vector<node*> res;
  18. text[0] = text[0]+32;
  19. int cnt = 0;
  20. for(int i=0;i<text.length();i++){
  21. if(text[i]!=' '){
  22. s+= text[i];
  23. }
  24. else {
  25. node*e = new node(s,cnt);
  26. res.push_back(e);
  27. cnt ++;
  28. s = "";
  29. }
  30. }
  31. node *e = new node(s,cnt);
  32. res.push_back(e);
  33. for(int i=0;i<res.size();i++){
  34. cout << res[i]->s << endl;
  35. }
  36. sort(res.begin(),res.end(),cmp);
  37. s = "";
  38. for(int i=0;i<res.size();i++){
  39. if(i!=0) s+= ' ';
  40. s += res[i]->s;
  41. }
  42. s[0] -= 32;
  43. return s;
  44. }
  45. };

其实用stable_sort来实现稳定排序即可,这样就不用结构体了

bool cmp(string a,string b){
        int lena = a.length() ,lenb = b.length();
        return lena < lenb;
}
class Solution {
public:
    string arrangeWords(string text) {
        string s = "";
        vector<string> res;
        text[0] = text[0]+32;
        int cnt = 0;
        for(int i=0;i<text.length();i++){
            if(text[i]!=' '){
                s+=  text[i];
            }
            else {
                res.push_back(s);
                s = "";
            }
        }
        res.push_back(s);
        for(int i=0;i<res.size();i++){
            cout << res[i] << endl;
        }
        stable_sort(res.begin(),res.end(),cmp);
        s = "";
        for(int i=0;i<res.size();i++){
            if(i!=0) s+=  ' ';
            s += res[i];
        }
        s[0] -= 32;
        return s;
    }
};

时间复杂度:O(n)+O(klogk) (其中 k = res.size())

5414. 收藏清单

可以说是暴力做法了,要用unordered_set才能过,set会超时。

class Solution {
public:
    vector<int> peopleIndexes(vector<vector<string>>& favoriteCompanies) {
        vector<int> res;
        int n = favoriteCompanies.size();
        unordered_set<string> arr[n];
        for(int i=0;i<n;i++){
            for(int j=0;j<favoriteCompanies[i].size();j++){
                arr[i].insert(favoriteCompanies[i][j]);
            }
        }
        for(int i=0;i<n;i++){
            int flag = 0;
            for(int j=0;j<n;j++){
                if(i==j) continue;
                int f = 0;
                for(int k=0;k<favoriteCompanies[i].size();k++){
                    if(arr[j].find(favoriteCompanies[i][k])==arr[j].end()){
                        f = 1; break;
                    }
                }
                if(!f) {
                    flag = 1; break;
                }
            }
            if(!flag) res.push_back(i);
        }
        return res;
    }
};

时间复杂度:LeetcodeWeeklyContest-189 - 图1