青训营-中等题 1 | 豆包MarsCode AI刷题

18 阅读3分钟

红包运气排行榜

问题描述

小C参与了一场抢红包的游戏,现在他想要对所有参与抢红包的人进行一次运气排名。排名规则如下:抢到的金额越多,排名越靠前;如果两个人抢到的金额相同,则按照他们抢红包的顺序进行排名。比如,如果小C和小U抢到的金额相同,但小C比小U先抢,则小C排在小U前面。

样例1:

输入:n = 4 ,s = ["a", "b", "c", "d"] ,x = [1, 2, 2, 1]

输出:['b', 'c', 'a', 'd']

误区:

开始以为一个人只能抢一次,用了结构体存储 人名 和 金额 再进行结构体排序(按照zhi的大小排序,其他的默认排序),最后依次输出人名,结果错误,看到未果案例的分析,应该是一个名字可以抢多次,后续按照这个思路写,结果过了

纠正:

想到了用map容器存储 人名 和 金额 ,但是map容器不能直接排序,我还是决定是用其他暴力方法

同样用结构体存储 人名(string s1) 和 金额(int zhi);遍历 s 容器,每一次都判断当前的字符串是否已经存入结构体数组,如果已经存在,更新 zhi 的值,进行下一个遍历;如果不存在,将该字符串和对应的值存入结构体数组。最后输出 人名

  string s1;
  int zhi;
};

bool cmp(node a, node b) { return a.zhi > b.zhi; }

vector<string> solution(int n, vector<string> s, vector<int> x) {
  vector<node> arr;
  int k=0;
  for (int i = 0; i < n; i++) {
    bool flag = false;
    for (int j = 0; j < i; j++) {
      if (arr[j].s1 == s[i]) {
        arr[j].zhi += x[i];
        flag = true;
        break;
      }
    }
    if (!flag) {
      node temp ;
      temp.s1=s[i];
      temp.zhi=x[i];
      arr.push_back(temp);
      k++;
    }
  }
  sort(arr.begin(), arr.end(), cmp);
  vector<string> krr;
  for (int i = 0; i < arr.size(); i++) {
    krr.push_back(arr[i].s1);
  }
  return krr;
}

在网上看了下map的排序方法,还是决定学一下怎么写

用map容器的方法(参考CSDN上的作者————稻子永不倒)

把map里的数据(pair)存放在vector容器中 用sort()进行排序

  return a.second>b.second;
}
vector<string> solution(int n, vector<string> s, vector<int> x) {
  map<string,int>q;
  for(int i=0;i<n;i++){
    q[s[i]]+=x[i];
  }
  vector<string>kk;
  vector<pair<string,int>>m(q.begin(),q.end());
  sort(m.begin(),m.end(),cmp);
  for(int i=0;i<m.size();i++){
    kk.push_back(m[i].first);
  }
  return kk;
}

代码解释: vector<pair<string,int>>m(q.begin(),q.end())

vector 的构造函数的参数,它接受两个迭代器参数。q.begin()返回一个迭代器,指向 map q 的第一个元素,而 q.end() 返回一个迭代器,指向 map q 的末尾(即最后一个元素之后的位置)。

将 map q中的所有元素复制到新创建的vector m 中。map 中的每个键值对(key-value pair)都会被复制到 vector 中,作为一个 pair<string, int> 类型的元素

map使用补充:

map常用函数: 1.find():find(key)返回键是key的映射值

2.erase():删除元素。

3.size():用来获得map中映射多少个

4.clear():清空函数。

map容器还会根据键的大小来自动排序。

ai刷题一些感悟:

在这里刷题有一段时间了,最喜欢的就是利用ai获取即时反馈与错误分析,完成练习后,AI 能立即给出反馈,指出错误之处,并提供详细的解题思路和方法讲解,帮助我们迅速了解自己的问题所在,加深对知识点的理解,避免一错再错。

上述若有问题,欢迎友友指正!