鱼C论坛

 找回密码
 立即注册
查看: 3102|回复: 4

关于集合问题

[复制链接]
发表于 2019-12-20 22:22:55 | 显示全部楼层 |阅读模式
5鱼币
例如  集合a  集合 b  求b在a中的余集
集合a   1 2 3 4 5 6
集合b    2 4 5 6 7 8
输出   1 3

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 14:36:21 | 显示全部楼层
  1. #include <iostream>
  2. #include <vector>

  3. const std::vector<int> complement(const std::vector<int> &a, const std::vector<int> &b)
  4. {
  5.         std::vector<int> res;
  6.         for(const auto i: a)
  7.         {
  8.                 bool flag = true;
  9.                 for(const auto j: b)
  10.                 {
  11.                         if(i == j)
  12.                         {
  13.                                 flag = false;
  14.                                 break;
  15.                         }

  16.                 }
  17.                 if(flag)
  18.                         res.push_back(i);
  19.         }
  20.         return res;
  21. }

  22. std::ostream &operator<<(std::ostream &os, const std::vector<int> &data)
  23. {
  24.         for(const auto i: data)
  25.         {
  26.                 std::cout << i << " ";
  27.         }
  28.         return os;
  29. }

  30. int main()
  31. {
  32.         std::vector<int> a = {1, 2, 3, 4, 5, 6};
  33.         std::vector<int> b = {2, 4, 5, 6, 7, 8};
  34.         std::cout << complement(a, b) << std::endl;
  35.         return 0;
  36. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 15:33:17 | 显示全部楼层
a = [1,2,3,4,5,6]
b = [2,4,5,6,7,8]
for i in a:
        if i not in b:
                print(i,end=" ")
楼上写的太高深看不到
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 16:01:44 | 显示全部楼层
荣耀 发表于 2019-12-21 15:33
a = [1,2,3,4,5,6]
b = [2,4,5,6,7,8]
for i in a:

这里是C/C++,不是py
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 16:21:45 | 显示全部楼层
提供一个排序之后的算法,效率要高一些:
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;

  5. template <typename T>
  6. vector<T> operator-(vector<T> a, vector<T> b) {
  7.         sort(a.begin(), a.end());
  8.         sort(b.begin(), b.end());
  9.         vector<T> ret;
  10.         for (auto p = a.begin(), q = b.begin(); p != a.end(); ++p) {
  11.                 while (q != b.end() && *p > *q) {
  12.                         q++;
  13.                 }
  14.                 if (q != b.end() && *p == *q) {
  15.                         continue;
  16.                 }
  17.                 ret.push_back(*p);
  18.         }
  19.         return ret;
  20. }

  21. template <typename T>
  22. ostream& operator<<(ostream& os, vector<T> v) {
  23.         os << "{ ";
  24.         bool b = false;
  25.         for (const T& t : v) {
  26.                 if (b) {
  27.                         os << " , ";
  28.                 }
  29.                 os << t;
  30.                 b = true;
  31.         }
  32.         os << " }";
  33.         return os;
  34. }
  35. int main() {
  36.         vector<int> a = { 1,2,3,4,5,6 };
  37.         vector<int> b = { 2,4,5,6,7,8 };
  38.         vector<int> c = a - b;
  39.         cout << c << endl;
  40.         system("pause");
  41. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 15:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表