【C++系列】STL容器——vector类的例题应用(12)

简介: 【C++系列】STL容器——vector类的例题应用(12)

【例1] 只出现一次的数字i(范围for与模等(^=))

  • 给出一段数字(例:223344566)(数字出现均两次,只有一个数字只出现一次),并保存在vector中,找到这个出现一次的数字
  • 核心思路:【^=】相同的数模等后为1,最后结果只剩下这个只出现一次的数字
class Solution 
{
public:
  int singleNumber(vector<int>& nums)
  {
   int value = 0;
   for(auto e : v)
    {
      value ^= e; 
    }
   return value;
  }
};

【例2] 杨辉三角OJ(resize & vector类型的vector)

  • 设计思路图示:
  1. 初始化每一行所有元素都为“1”
  2. 根据杨辉三角特性调整中间元素
// 涉及resize / operator[]
// 核心思想:找出杨辉三角的规律,发现每一行头尾都是1,中间第[j]个数等于上一行[j-1]+[j]
class Solution 
{
    public:
     vector<vector<int>> generate(int numRows)//传入的参数表示要求杨辉三角的行数
    {
     vector<vector<int>> vv(numRows);//初始化每一行所有元素都为“1”
     for(int i = 0; i < numRows; ++i)
      {
          vv[i].resize(i+1, 1);
      }
     for(int i = 2; i < numRows; ++i)//根据杨辉三角特性调整中间元素
     {
       for(int j = 1; j < i; ++j)
         {
           vv[i][j] = vv[i-1][j] + vv[i-1][j-1];
         }
     }
    return vv;
    }
};

【例3] 电话号码的数字组合(多路递归)

  • 题目要求输入所示:
  • 解题思路:
  • 首先根据题目要求,我们明白要设置一个string,存储【abc】【def】等等字符串
  • 当我们输入"258时",根据题意,我们要做到如图所示【abc】【jkl】【tuv】三者的全排列
  • 我们发现其中可以用 多路递归 的方式来访问
  • 1.图中 aj先分别访问了t u v,得到ajt,aju,ajv ;
  • 2.随后放回,a访问k,再同(1)步骤,分别访问t u v,得到 akt,aku,akv ,同理…
  • 代码细节:
  1. 我们一开始要设置【字串:digits】【层次:level】【存储 结合后返回的一系列串:combineStr】【给定vector:v】
  2. 我们发现,每一层都要涉及到 多路递归 ,于是我们要根据 层数 进行 for循环 for循环
  3. 我们发现,递归后得到的字串的 元素个数 与 层数 是相同的
  4. 注意点: 要将字符类转换成整型(-“0”),以便于访问对应“电话按键”strA中的字符串
string strA[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
             // 输入的数字组合    当前层次      结合后的新字符串      存储所有的全排列组合
  void Combine(string digits, int level, string combineStr, vector<string&> v)
  {
    if (level == digits.size()) //递归后得到的字串的元素个数与层数是相同的
      {
        v.push_back(combineStr);//当到最后一层的时候,将新字符串尾插进vector中
        return;
    }
  int num = digits[level] - '0';//将字符类转换成整型
  string str = strA[num];//访问对应“电话按键”strA中的字符串
  for (size_t i = 0; i < str.size(); ++i) //每一层都要涉及到多路递归,于是我们要根据层数进行for循环
      {
        Combine(digits, level + 1, combineStr + str[i], v);
      }
}


相关文章
|
2天前
|
存储 C++ 容器
C++:STL - set & map
C++:STL - set & map
10 4
|
2天前
|
编译器 C++ Windows
【C++】vector问题解决(非法的间接寻址,迭代器失效 , memcpy拷贝问题)
不使用memcpy函数不就可以了,然后我们使用简单粗暴的赋值拷贝,这样就不会发生浅拷贝问题了!!!
12 1
|
2天前
|
编译器 C++
【C++】继续学习 string类 吧
首先不得不说的是由于历史原因,string的接口多达130多个,简直冗杂… 所以学习过程中,我们只需要选取常用的,好用的来进行使用即可(有种垃圾堆里翻美食的感觉)
7 1
|
2天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
9 0
|
2天前
|
存储 安全 测试技术
【C++】string学习 — 手搓string类项目
C++ 的 string 类是 C++ 标准库中提供的一个用于处理字符串的类。它在 C++ 的历史中扮演了重要的角色,为字符串处理提供了更加方便、高效的方法。
10 0
【C++】string学习 — 手搓string类项目
|
1天前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
10 0
|
2天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
2天前
|
存储 安全 数据库
【Docker 专栏】Docker 容器内应用的状态持久化
【5月更文挑战第9天】本文探讨了Docker容器中应用状态持久化的重要性,包括数据保护、应用可用性和历史记录保存。主要持久化方法有数据卷、绑定挂载和外部存储服务。数据卷是推荐手段,可通过`docker volume create`命令创建并挂载。绑定挂载需注意权限和路径一致性。利用外部存储如数据库和云服务可应对复杂需求。最佳实践包括规划存储策略、定期备份和测试验证。随着技术发展,未来将有更智能的持久化解决方案。
【Docker 专栏】Docker 容器内应用的状态持久化
|
2天前
|
机器学习/深度学习 监控 Kubernetes
【Docker 专栏】Docker 容器内服务的自动扩展与缩容
【5月更文挑战第9天】本文探讨了Docker容器服务的自动扩展与缩容原理及实践,强调其在动态业务环境中的重要性。通过选择监控指标(如CPU使用率)、设定触发条件和制定扩展策略,实现资源的动态调整。方法包括云平台集成和使用Kubernetes等框架。实践中,电商平台和实时数据处理系统受益于此技术。注意点涉及监控数据准确性、扩展速度和资源分配。未来,智能算法将提升扩展缩容的效率和准确性,成为关键技术支持。
【Docker 专栏】Docker 容器内服务的自动扩展与缩容
|
2天前
|
Java 数据库连接 Docker
【Docker 专栏】Docker 容器内环境变量的管理与使用
【5月更文挑战第9天】本文介绍了Docker容器中环境变量的管理与使用,环境变量用于传递配置信息和设置应用运行环境。设置方法包括在Dockerfile中使用`ENV`指令或在启动容器时通过`-e`参数设定。应用可直接访问环境变量或在脚本中使用。环境变量作用包括传递配置、设置运行环境和动态调整应用行为。使用时注意变量名称和值的合法性、保密性和覆盖问题。理解并熟练运用环境变量能提升Docker技术的使用效率和软件部署质量。
【Docker 专栏】Docker 容器内环境变量的管理与使用