当前位置: 首页 > news >正文

探索C嘎嘎的奇妙世界:第十六关---STL(vector的练习)

1.只出现一次的数字

        我们可以使用异或运算来解决这个问题:
 
        异或运算有一个重要的性质:两个相同的数进行异或运算结果为 0,任何数与 0 异或结果为其本身。对于数组中的元素,依次进行异或运算,出现两次的元素异或后会变成 0,最后剩下的就是只出现一次的那个元素。
        以下是具体步骤:
        数组 [2,2,1],2^2=0,0^1=1,所以输出 1。

那么请看正确代码:

class Solution {
public:int singleNumber(vector<int>& nums) {int val=0;for(auto e :nums)val^=e;return val;}
};

这是一种方法,然而还有一种传统的方法:

class Solution {
public:int singleNumber(vector<int>& nums) {int flag=0;for(size_t i=0;i<nums.size();i++){flag=0;for(size_t j=0;j<nums.size();j++){if(nums[i]==nums[j]&&i!=j)flag=1;}if(flag==0)return nums[i];}return 0;}
};

        上述代码首先创建一个变量flag并将其初始化为0,用于标记是否找到了只出现一次的元素。然后使用两个嵌套的循环遍历数组。外层循环用于遍历每个元素,内层循环用于比较当前元素与其他元素是否相等。如果找到了一个与当前元素相等且索引不同的元素,说明当前元素不是只出现一次的元素,将flag标记为1。最后,在外层循环中判断flag的值,如果flag为0,则说明当前元素是只出现一次的元素,直接返回该元素。如果循环结束后都没有找到只出现一次的元素,则返回0

2.杨辉三角

 

        杨辉三角是一个数列,其第n行由 n个数字构成,每个数字等于它上方两个数字之和。首先,我们来看一下杨辉三角的定义:每一行的两侧数字都是1,中间的数字等于上一行对应位置的两个数字之和。可以使用二维数组来表示整个杨辉三角,其中第i行第j列的数字可以表示为triangle[i][j]。那么我们可以使用以下的编程思路来生成杨辉三角:

  1. 创建一个二维数组triangle,初始化为一个空的二维数组。
  2. 使用两个嵌套的循环来遍历杨辉三角的每一行和每一列,外层循环控制行数,内层循环控制列数。
  3. 在内层循环中,对于每一行的第一个位置和最后一个位置,将其值设置为1。
  4. 对于其他位置,将其值设置为其上一行对应位置的两个数字之和,即triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]。
  5. 内层循环结束后,将当前行的数组添加到triangle中。
  6. 外层循环结束后,triangle中存储的就是完整的杨辉三角

请看正确代码:

class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> triangle;if (numRows <= 0) {return triangle;}for (int i = 0; i < numRows; i++) {vector<int> row(i+1, 1); // 初始化每一行为1for (int j = 1; j < i; j++) {row[j] = triangle[i-1][j-1] + triangle[i-1][j]; // 计算其他位置的值}triangle.push_back(row); // 将当前行添加到triangle中}return triangle;}
};

         这段代码使用了一个二维数组triangle来存储杨辉三角的每一行的数字。首先判断numRows的值,如果小于等于0,则直接返回空的triangle。然后,使用两个嵌套的循环来遍历杨辉三角的每一行和每一列。外层循环控制行数,内层循环控制列数。在内层循环中,对于每一行的第一个位置和最后一个位置,将其值设置为1。对于其他位置,将其值设置为其上一行对应位置的两个数字之和。内层循环结束后,将当前行的数组添加到triangle中。最后返回triangle即可得到完整的杨辉三角。这段代码的时间复杂度为O(numRows^2),其中numRows为所要生成杨辉三角的行数。因为需要使用两个嵌套的循环来遍历杨辉三角的每一行和每一列,时间复杂度较高。

3.删除有序数组中的重复项

 

删除有序数组中的重复项可以使用双指针的方法来实现。具体的编程思路如下:

  1. 初始化两个指针:一个指针i用于遍历整个数组,另一个指针j用于指向当前确定的不重复元素的位置。
  2. 从数组的第二个元素开始遍历,即i=1。
  3. 如果当前元素nums[i]与前一个元素nums[i-1]相等,表示出现了重复元素,此时指针i继续向后移动一位。
  4. 如果当前元素nums[i]与前一个元素nums[i-1]不相等,表示找到了一个不重复的元素,将其复制到指针j的位置,并将指针j向后移动一位。
  5. 重复步骤3和步骤4,直到遍历完整个数组。
  6. 返回指针j的位置+1,即为删除重复项后的数组长度。
class Solution {
public:int removeDuplicates(vector<int>& nums) {if (nums.size() == 0) {return 0;}int j = 1; // 指针j初始指向第一个不重复元素的位置for (int i = 1; i < nums.size(); i++) {if (nums[i] != nums[i-1]) {nums[j++] = nums[i]; // 复制非重复元素到指针j的位置}}return j;}
};

         这段代码使用了两个指针i和j。指针i用于遍历整个数组,指针j用于指向当前确定的不重复元素的位置。首先判断数组的长度是否为0,如果是则直接返回0。然后从数组的第二个元素开始遍历,即i=1。如果当前元素nums[i]与前一个元素nums[i-1]相等,表示出现了重复元素,此时指针i继续向后移动一位。如果当前元素nums[i]与前一个元素nums[i-1]不相等,表示找到了一个不重复的元素,将其复制到指针j的位置,并将指针j向后移动一位。重复上述步骤直到遍历完整个数组,最后返回指针j的位置+1,即为删除重复项后的数组长度。这段代码的时间复杂度为O(n),其中n为数组的长度。只需要遍历一次数组即可删除重复项,时间复杂度较低。

4.只出现一次的数字2.0

这道题和第一道题思路大概一致,只不过这里的重复次数变成了3次,还能不能使用异或呢,显然不能了,那我们第一道题的第二种方法能不能解呢?答案是可以的,那么请看示例代码:

class Solution {
public:int singleNumber(vector<int>& nums) {int flag=0;for(size_t i=0;i<nums.size();i++){flag=0;for(size_t j=0;j<nums.size();j++){if(nums[i]==nums[j]&&i!=j)flag=1;}if(flag==0)return nums[i];}return 0;}
};

        这里就不在解析了,思路和第一题的第二种方法一样。

5.只出现一次的数字3.0

思路依旧类似,只不过需要返回多个元素,只需要尾插到顺序表中即可,请看示例代码:

class Solution {
public:vector<int> singleNumber(vector<int>& nums) {vector<int> vv;int flag=0;for(size_t i=0;i<nums.size();i++){flag=0;for(size_t j=0;j<nums.size();j++){if(nums[i]==nums[j]&&i!=j)flag=1;}if(flag==0)vv.push_back(nums[i]);}return vv;}
};

        写法和前两种基本相似,不同之处在于,找到之后不会直接返回,而是尾插到顺序表中最后一块返回。

6.数组中出现次数超过一半的数字

常规写法就是统计他们出现的总次数,然后进行判断是否大于数组长度的一半,请看示例代码:

        int count=0;for(size_t i=0;i<numbers.size();i++){count=1;for(size_t j=0;j<numbers.size();j++){if(numbers[i]==numbers[j]&&i!=j)count++; }if(count>numbers.size()/2)return numbers[i];}return 0;

        上述代码的具体的分析如下:

        1. 初始化计数变量`count`为0。
        2. 使用嵌套的循环结构遍历数组元素,外层循环是遍历数组中的每一个元素,内层循环是用来统计数组中该元素出现的次数。
        3. 对于每一个外层循环迭代的元素,首先将计数变量`count`重置为1,表示当前元素至少出现了一次。
        4. 然后通过内层循环遍历数组中的每一个元素,如果发现数组中有与当前元素相等的元素且索引不同,就将计数变量`count`加1。
        5. 在内层循环结束后,判断计数变量`count`是否超过了数组长度的一半,如果超过了则说明该元素出现次数超过了数组长度的一半,直接返回该元素。
        6. 如果没有找到出现次数超过数组长度一半的元素,最后返回0。

        这段代码的时间复杂度为O(n^2),其中n为数组的长度。因为嵌套循环的复杂度为O(n^2),每个元素都需要遍历一次数组进行统计。所以在数组较大时,性能可能比较差。

那么有没有什么简单的方法呢?

        分析一下题中的关键字“数组长度的一半“能不能想到把这个数组排序一下中间的就是我们要找的呢?哈哈,巧妙吧?那么请看示例代码吧:

class Solution {
public:int MoreThanHalfNum_Solution(vector<int>& numbers) {sort(numbers.begin(),numbers.end());return numbers[numbers.size()/2];}
};

直接对数组进行排序,取其中间值就行。

  到此我们只是简单的讲解了一下STL中vector的相关习题~,后续我们会一一展开学习的,希望这篇博客能给您带来一些启发和思考!那我们下次再一起探险喽,欢迎在评论区进行讨论~~~

相关文章:

探索C嘎嘎的奇妙世界:第十六关---STL(vector的练习)

1.只出现一次的数字 我们可以使用异或运算来解决这个问题&#xff1a; 异或运算有一个重要的性质&#xff1a;两个相同的数进行异或运算结果为 0&#xff0c;任何数与 0 异或结果为其本身。对于数组中的元素&#xff0c;依次进行异或运算&#xff0c;出现两次的元素异…...

最新扣子(Coze)实战案例:扣子卡片的制作及使用,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 关注斜杠君&#xff0c;可获取完整版教程。&#x1f44d;&#x1f3f…...

Node-red win11安装

文章目录 前言一、安装node.js和npm二、安装Node-red三、 运行Node-red 前言 Node-RED 是一种编程工具&#xff0c;用于以新颖有趣的方式将硬件设备、API 和在线服务连接在一起。 它提供了一个基于浏览器的编辑器&#xff0c;只需单击一下即可将调色板中的各种节点轻松连接在…...

永久更改R包的安装目录

要永久更改 R 包的安装目录&#xff0c;可以通过设置 R 配置文件来实现。以下是步骤说明&#xff1a; 1. 查找和修改 R 配置文件 R 有几个配置文件用于保存用户和系统的设置&#xff1a; 用户级配置文件&#xff1a;通常位于 ~/.Rprofile系统级配置文件&#xff1a;通常位于…...

Webrtc支持FFMPEG硬解码之NVIDA(二)

一、前言 此系列文章分分为三篇, Webrtc支持FFMPEG硬解码之Intel(一)-CSDN博客 Webrtc支持FFMPEG硬解码之NVIDA(二)-CSDN博客 Webrtc支持FFMPEG硬解码之解码实现-CSDN博客 AMD硬解目前还没找到可用解码器,欢迎留言交流 二、环境 Windows平台 VS2019 Cmake 三、下…...

整理好了!2024年最常见 20 道设计模式面试题(九)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常见 20 道设计模式面试题&#xff08;八&#xff09;-CSDN博客 十七、什么是享元模式&#xff1f;它在资源优化中扮演什么角色&#xff1f; 享元模式&#xff08;Flyweight Pattern&#xff09;是一种常用的软件设计模式…...

RAG实操教程langchain+Milvus向量数据库创建你的本地知识库 二

Miluvs 向量数据库 关于 Milvui 可以参考我的前两篇文章 • 一篇文章带你学会向量数据库Milvus&#xff08;一&#xff09;[1]• 一篇文章带你学会向量数据库Milvus&#xff08;二&#xff09;[2] 下面我们安装 pymilvus 库 pip install --upgrade --quiet pymilvus如果你…...

Spring+SpringMVC介绍+bean实例化+依赖注入实战

Spring介绍 Spring是一个轻量级的Java 开发框架&#xff0c;核心是IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09; Spring解决了业务层&#xff08;Service包&#xff09;与其他各层&#xff08;表现层&#xff0c;包括Model&#xff0c;Vie…...

【安装笔记-20240616-Linux-为 OpenWrt 自动挂载 Windows 主机共享目录】

安装笔记-系列文章目录 安装笔记-20240616-Linux-为 OpenWrt 自动挂载 Windows 主机共享目录 文章目录 安装笔记-系列文章目录安装笔记-20240616-Linux-为 OpenWrt 自动挂载 Windows 主机共享目录 前言一、软件介绍名称&#xff1a;cifsutils主页官方介绍特点 二、安装步骤测试…...

61.WEB渗透测试-信息收集- WAF、框架组件识别(1)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;60.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露&#xff08;8&#xff09; WAF的识…...

qmt量化交易策略小白学习笔记第45期【qmt编程之期货行情数据--如何获取日线行情、tick行情】

qmt编程之获取期货行情数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取日线行情数…...

c#default 运算符

值类型默认值boolfalsebyte0char‘\0’decimal0.0Mdouble0.0Denum表达式 (E)0 产生的值&#xff0c;其中 E 为 enum 标识符。float0.0Fint0long0Lsbyte0short0struct将所有的值类型字段设置为默认值并将所有的引用类型字段设置为 null 时产生的值。uint0ulong0ushort0引用类型n…...

25计算机考研,这所985有机会!

吉林大学的计算机学科评估是A-&#xff0c;软件是B 实力还是很强的&#xff01; 考研的专科课代码分别是941和966 其实就是自命题&#xff0c;941是四合一&#xff1a;数据结构&#xff0c;计算机组成与设计&#xff0c;操作系统和计算机网络&#xff0c;这个和408统考的科目…...

SQL 基础入门教程

目录 什么是 SQL&#xff1f; SQL 的基本操作 数据库的创建和删除 表的创建和删除 数据的插入 数据的查询 数据的更新 数据的删除 SQL 的高级操作 表的连接 聚合函数 分组和排序 子查询 视图 索引 SQL 的数据完整性和约束 总结 SQL&#xff08;Structured Que…...

<Python><paddleocr>基于python使用百度paddleocr实现图片文字识别与替换

前言 本文是使用百度的开源库paddleocr来实现对图片文字的识别,准确度还不错,对图片文字的替换,则利用opencv来完成。 环境配置 系统:windows 平台:visual studio code 语言:python 库:paddleocr、opencv、pyqt5 依赖库安装 本例所需要的库可以直接用pip来安装。 安装…...

小程序开发的费用简介篇

小程序的价格跟很多因素有关系&#xff0c;比如你想要的复杂度、功能多不多等等 今天我就来具体说说开发一款APP&#xff0f;小程序到底需要多少 ❶功能复杂度&#xff1a;功能越多越复杂&#xff0c;开发时间和费用就越高&#xff0c;费用就会高 ❷设计要求&#xff1a;高级的…...

torch.unflod与torch.nn.functional.pad用法

PyTorch 中的两个函数:torch.unfold 和 torch.nn.unfold。它们分别用于不同的目的,让我们分别来理解一下: torch.nn.Unfold 类功能: 类似于函数 torch.unfold,torch.nn.Unfold 类也用于沿着指定维度滑动提取窗口并将每个窗口展平。与函数不同的是,torch.nn.Unfold 是一个…...

江苏 服务器性能监控包含哪些方面?

服务器的性能监控主要是为了确保服务器能够正常运行工作和性能优化的重要手段&#xff0c;接下来就来看一下服务器性能监控所包含的内容有哪些吧&#xff01; 首先对于服务器的系统资源进行一定的监控&#xff0c;CPU作为服务器的核心组件之一&#xff0c;所以我们要监控CPU的使…...

卓越的 App UI 风格引领潮流

卓越的 App UI 风格引领潮流...

BirdTalk IM集群中消息流转策略讨论

BirdTalk IM集群中消息流转策略讨论 目前群聊的存储策略是1写多读方案&#xff1b;每个群组一个队列&#xff0c;按时间顺序排列&#xff0c;不区分用户&#xff1b; 私聊的存储是写扩散的&#xff0c;每个人都有自己的消息队列&#xff0c;按时间顺序 保存所有的消息&#x…...

重磅!2024年最新影响因子正式发布,附Excel下载

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 激动人心的时刻终于来了&#xff0c;2024年影响因子已全面发布&#xff01;废话不多说&#xff0c;大家一起来看看最新的发布的结果吧&#xff01; 神刊&#xff1a;CA-A CANCER JOURNA…...

【会议征稿】2024年应用计算智能、信息学与大数据国际会议(ACIIBD 2024,7月26-28)

2024年应用计算智能、信息学与大数据国际学术会议&#xff08;ACIIBD 2024&#xff09;将于2024年7月26-28日在中国广州举办。会议将聚焦于计算智能及其应用、信息、大数据等相关的研究领域&#xff0c; 广泛邀请国内外知名专家学者&#xff0c;共同探讨相关学科领域的最新发展…...

【代码发布】Quantlab4.3:lightGBM应用于全球大类资产的多因子智能策略(代码+数据)

原创文章第566篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 昨天&#xff0c;Quantlab整合Alpha158因子集&#xff0c;为机器学习大类资产配置策略做准备&#xff08;代码数据&#xff09;&#xff0c;我们完成了因子集构建&#xff0c;并尝试…...

【毕业设计】Django 校园二手交易平台(有源码+mysql数据)

此项目有完整实现源码&#xff0c;有需要请联系博主 Django 校园二手交易平台开发项目 项目选择动机 本项目旨在开发一个基于Django的校园二手交易平台&#xff0c;为大学生提供一个安全便捷的二手物品买卖平台。该平台将提供用户注册和认证、物品发布和搜索、交易信息管理等…...

文章自动生成器,在线AI写作工具

随着人工智能AI技术的发展&#xff0c;AI技术被应用到越来越多的场景。对于需要创作内容的同学来说&#xff0c;AI写作-文章内容自动生成器是一个非常好的辅助工具。AI写作工具可以提升我们的创作效率&#xff0c;快速的生成文章&#xff0c;然后在根据需求进行调整修改即可。下…...

Matlab初识:什么是Matlab?它的历史、发展和应用领域

目录 一、什么是Matlab&#xff1f; 二、Matlab的历史与发展 三、Matlab的应用领域 四、安装和启动Matlab 五、界面介绍 六、第一个Matlab程序 七、总结 一、什么是Matlab&#xff1f; Matlab 是由 MathWorks 公司开发的一款用于数值计算、可视化以及编程的高级技术计算…...

大模型之-Seq2Seq介绍

大模型之-Seq2Seq介绍 1. Seq2Seq 模型概述 Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是一种用于处理序列数据的深度学习模型&#xff0c;常用于机器翻译、文本摘要和对话系统等任务。它的核心思想是将一个输入序列转换成一个输出序列。 Seq2Seq模型由两个主…...

NSSCTF-Web题目12

目录 [SWPUCTF 2021 新生赛]finalrce 1、题目 2、知识点 3、思路 [UUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 3、思路 [羊城杯 2020]easycon 1、题目 2、知识点 3、思路 [SWPUCTF 2021 新生赛]finalrce 1、题目 2、知识点 命令执行&#xff0c;tee命令 3、思路…...

22、架构-资源与调度

1、资源与调度 调度是容器编排系统最核心的功能之一&#xff0c;“编排”一词本身便包 含“调度”的含义。调度是指为新创建的Pod找到一个最恰当的宿主机 节点来运行它&#xff0c;这个过程成功与否、结果恰当与否&#xff0c;关键取决于容器 编排系统是如何管理与分配集群节点…...

mac 常用工具命令集合

Iterm2 Command T&#xff1a;新建标签 Command W&#xff1a;关闭当前标签 Command ← →&#xff1a;在标签之间切换 Control U&#xff1a;清除当前行 Control A&#xff1a;跳转到行首 Control E&#xff1a;跳转到行尾 Command F&#xff1a;查找 Command …...

江西建设网官方网站/在线外链发布工具

jsp基础知识详解 简介&#xff1a; JSP全称是JavaServer Pages&#xff0c;它和servle技术一样&#xff0c;都是SUN公司定义的一种用于开发动态web资源的技术。 JSP这门技术的最大的特点在于&#xff0c;写jsp就像在写html&#xff0c;但&#xff1a; 它相比html而言&#xff…...

温州公司建设网站/企业线上培训课程

精益质量管理简析(转载)精益质量管理简析http://www.quality-world.cn/guanli/2741.html精益质量管理就是在对关键质量数据的定量化分析基础上&#xff0c;综合运用多种知识和方法&#xff0c;对关键质量指标持续系统改进&#xff0c;追求达到卓越标准&#xff0c;如6西格玛标准…...

成都大邑网站建设/友情链接平台网站

Jenkins是一个独立的开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务&#x…...

光做网站推广咋样/营销咨询顾问

使用手机的时候&#xff0c;尤其是安卓手机经常会多出一些莫名的照片&#xff0c;这些照片即使删除了&#xff0c;下次还会多出另外一些照片。很奇怪的是&#xff0c;为什么记得自己没有保存&#xff0c;手机里却多了这些莫名其妙的照片呢&#xff1f;如果你使用的是华为手机&a…...

网站建设平台硬件要求/win7优化大师官方免费下载

文章目录正则替换正则替换 function convertNumToThousand(num){num ;if(num.indexOf(.) -1){//不带小数点的情况//将数字转化的字符串反转var str num.split().reverse().join(),len num.split().length;//每3位加一个千分位逗号convertStr str.replace(/(\d{3})/g,$1,)…...

泾川县建设局网站/平台连接

学习一门新的语言肯定是要从他的主要的语法開始&#xff0c;语法构成了整个程序设计的基础&#xff0c;从语法中我们也能够看到这门语言的一些特性。可是话说回来。语法这东西&#xff0c;不同的语言大同小异&#xff0c;所以这也对语法的记忆造成了一定的难度。事实上最好的方…...