C++:vector(题目篇)
文章目录
- 前言
- 一、只出现一次的数字
- 二、只出现一次的数字 II
- 三、只出现一次的数字 III
- 四、杨辉三角
- 五、删除有序数组中的重复项
- 六、数组中出现次数超过一半的数字
- 七、电话号码的字母组合
- 总结
前言
今天我们一起来看vector相关的题目~
一、只出现一次的数字
只出现一次的数字
经典的单身狗问题,不断异或
就好啦~
可以使用 位运算中的异或操作 来解决这个问题。异或操作有几个重要的性质:
- 任意数与 0 异或的结果是它本身,即
a ^ 0 = a
。 - 任意数与它自己异或的结果是 0,即
a ^ a = 0
。 - 异或满足交换律和结合律,即
a ^ b ^ a = a ^ a ^ b = b
。
利用这些性质,我们可以将数组中所有的数字进行一次异或运算,相同的数字异或后会抵消为 0,最终剩下的就是只出现一次的那个数字。
class Solution {
public:int singleNumber(vector<int>& nums) {int value = 0;for(auto e : nums){value ^= e;}return value;}
};
二、只出现一次的数字 II
只出现一次的数字 II
-
ones
记录那些位在某一时刻出现了 一次 的状态。 -
twos
记录那些位在某一时刻出现了 两次 的状态。 -
ones ^ num
:对ones
和当前数字num
进行异或操作更新ones
的状态。- 如果
ones
中某个位是0
,而num
中该位是1
,则该位变为1
,表示该位出现了一次。 - 如果
ones
中某个位是1
,而num
中该位也是1
,则该位变为0
,表示该位出现了两次(此时我们需要把该位交给twos
追踪)。
- 如果
-
& ~twos
:这是最关键的一步。- 这一步的目的是清除
ones
中那些已经出现在twos
中的位(即某个位已经出现了 两次),因为这些位不再属于“只出现一次”的范围。 ~twos
的作用是对twos
中的位进行按位取反(~
是按位取反操作),这样twos
中原本是1
的位就变成了0
,原本是0
的位就变成了1
。- 然后将
ones
与~twos
进行按位 与操作(&),确保那些在twos
中为1
的位在ones
中被清除掉。具体说:- 如果
twos
中某个位是1
(表示该位已经出现了两次),那么~twos
中对应位为0
,与ones
进行按位与时,这个位在ones
中会被清零(清除这位)。 - 如果
twos
中某个位是0
,那么~twos
中对应位为1
,此时ones
中该位的状态保持不变。
- 如果
- 这一步的目的是清除
twos = (twos ^ num) & ~ones
-
twos ^ num
:对twos
和当前数字num
进行异或操作,更新twos
的状态。 -
& ~ones
:这一步与& ~twos
类似,作用是清除twos
中那些已经出现在ones
中的位(即只出现一次的位)。 -
& ~twos
确保ones
中只记录那些出现 一次 的位,将出现两次的位从ones
中清除。 -
& ~ones
确保twos
中只记录那些出现 两次 的位,将只出现一次的位从twos
中清除。
class Solution {
public:int singleNumber(vector<int>& nums) {int ones = 0, twos = 0;for(auto e : nums){ones = (ones^e) & ~twos;twos = (twos^e) & ~ones;} return ones;}
};
三、只出现一次的数字 III
只出现一次的数字 III
class Solution {
public:vector<int> singleNumber(vector<int>& nums) {int xorsum = 0;for (int num: nums) {xorsum ^= num;}// 防止溢出int lsb = (xorsum == INT_MIN ? xorsum : xorsum & (-xorsum));int type1 = 0, type2 = 0;for (int num: nums) {if (num & lsb) {type1 ^= num;}else {type2 ^= num;}}return {type1, type2};}
};
四、杨辉三角
杨辉三角
这段代码是C语言的风格,用到了二级指针,而且开空间很不方便
这段代码是C++vector的风格,vector不用我们手动开辟空间,调用接口,既可以达到开空间的效果。
class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> vv(numRows);for(int i = 0; i < numRows; i++){vv[i].resize(i + 1, 1);}for(int i = 0; i < numRows; i++){for(int j = 1; j < vv[i].size() - 1; j++){vv[i][j] = vv[i - 1][j] + vv[i - 1][j - 1];}}return vv;}
};
五、删除有序数组中的重复项
删除有序数组中的重复项
属于双指针的思想~
前面有讲解
int removeDuplicates(int* nums, int numsSize) {if(numsSize == 1){return 1;}int k = 1;int slow = 0;int fast = 0;for(int i = 0; i<numsSize; i++){if(nums[slow] == nums[fast]){fast++;}else{nums[k] = nums[fast];slow = fast;fast++;k++;}}return k;
}
六、数组中出现次数超过一半的数字
数组中出现次数超过一半的数字
这个直接排序,中间的数就是出现超过一半的数~
class Solution {
public:int MoreThanHalfNum_Solution(vector<int>& numbers) {sort(numbers.begin(), numbers.end());int cond = numbers[numbers.size() / 2];return cond;}
};
七、电话号码的字母组合
电话号码的字母组合
代码讲解:
1. 映射部分 (strA
数组):
strA
数组用于存储数字到字母的映射关系,模拟了手机按键的布局:
strA[2] = "abc"
表示数字 2 对应的字母为 “abc”。strA[3] = "def"
表示数字 3 对应 “def”,依此类推。
这个映射数组中的索引值对应于按键上的数字,数字从 2 到 9 各自映射到一组不同的字母。而数字 0 和 1 对应空字符串,因为题目中 1 不映射到任何字母。
2. 递归组合部分 (Combine
函数):
该函数通过递归的方式生成所有可能的字母组合。
level
参数表示当前递归的层级(即当前处理的数字索引)。combine_str
是当前已组合好的字符串。
递归的步骤如下:
- 如果当前
level
等于digits
的长度,说明已经处理完所有的数字,将当前生成的组合字符串combine_str
添加到ansA
结果集中。 - 取出当前数字(
digits[level]
)对应的字母(通过strA
获取),并依次与前面已经组合好的字符串拼接。 - 通过递归调用,将处理移动到下一个数字,直到组合出所有可能的字母排列。
这个地方其实是一个全排列:
这里递归调用展开图是这样的:
递归遍历通过层层递进的方式,依次处理每个数字对应的字母,将当前构造的组合传递到下一层,直到所有数字都处理完为止。在每次递归中,当前数字的每个字母都与之前的组合拼接,递归到最深处时,完成一组字母组合并添加到结果中。
class Solution {
public://数字与字母间的映射string strA[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};//返回所有组合void Combine(int level, string digits, string combine_str, vector<string>& ansA){if(level == digits.size()){ansA.push_back(combine_str);return;}int nums = digits[level] - '0';string str = strA[nums];for(int i = 0; i < str.size(); i++){Combine(level + 1, digits, combine_str + str[i], ansA);}}vector<string> letterCombinations(string digits) {vector<string> ansA;if(digits.empty())return ansA;Combine(0, digits, "", ansA);return ansA;}
};
总结
谢谢大家~
相关文章:

C++:vector(题目篇)
文章目录 前言一、只出现一次的数字二、只出现一次的数字 II三、只出现一次的数字 III四、杨辉三角五、删除有序数组中的重复项六、数组中出现次数超过一半的数字七、电话号码的字母组合总结 前言 今天我们一起来看vector相关的题目~ 一、只出现一次的数字 只出现一次的数字…...
JS 怎么监听复制事件 并获取复制内容 并修改复制文本内容
需求背景: 需要禁用部分文本内容的复制事件,并且在复制事件发生时,将复制的文本内容通过接口传给后端。 上代码: // 使用Dom获取需要操作禁用时间的元素let element: any document.getElementById(test1);// 为该元素添加 copy 事…...

安卓使用.9图实现阴影效果box-shadow: 0 2px 6px 1px rgba(0,0,0,0.08);
1.安卓实现阴影效果有很多种,一般UX设计会给以H5参数box-shadow: 0 2px 6px 1px rgba(0,0,0,0.08);这种方式提供背景阴影效果,这里记录一下实现过程 2.界面xml源码 <?xml version"1.0" encoding"utf-8"?> <layout xmlns…...
CSS3-Day1
CSS3圆角 border-radius CSS3盒阴影 box-shadow CSS3边界图片 border-image CSS3 background-clip属性 padding-box 沿着边框填充 content-box 在边框外面 CSS3 线性渐变 线性渐变 - 从上到下(默认情况下)#grad { background-image: linear…...

网站集群批量管理-Ansible(ad-hoc)
1. 概述 1. 自动化运维: 批量管理,批量分发,批量执行,维护 2. 无客户端,基于ssh进行管理与维护 2. 环境准备 环境主机ansible10.0.0.7(管理节点)nfs01 10.0.0.31(被管理节点)backup10.0.0.41(被管理节点) 2.1 创建密钥认证 安装sshpass yum install -y sshpass #!/bin/bash ##…...

github学生认证(Github Copilot)
今天想配置一下Github Copilot,认证学生可以免费使用一年,认证过程中因为各种原因折腾了好久,记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法,不包括配置copilot的全部流程~ 1、准备工作…...
【SQL调优指南--附带实例】
以下是50个SQL调优的例子,每个例子都附带了可执行的SQL语句: 删除重复记录: DELETE FROM table_name WHERE id NOT IN (SELECT MIN(id) FROM table_name GROUP BY col1, col2);使用索引来加速查询: ALTER TABLE table_name ADD…...

Java基础(下)
泛型 Java 泛型(Generics) 是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。 编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型 ArrayList<Person> persons new Arra…...
【python】极简教程1-何为程序
程序可以简单地理解为一系列执行运算的指令。这些运算可以是数学计算、符号运算(如检索或替换文档中的内容)或图形运算(如处理图像或播放视频)。 不同编程语言的基础指令大致相同,包括: 输入:从键盘、文件、网络或其他设备获取数据。输出:将数据显示在屏幕上、保存到文…...
【Transformer】Selective Attention Improves Transformer
这篇论文主要介绍了一种新方法——选择性注意力(Selective Attention),用于改善Transformer模型的性能和效率。 🤓 摘要 无关元素在注意力机制中的存在会降低模型性能。论文提出了一种无需额外参数的简单调整方法,即…...

博客项目自动化测试(一)
1. 确认博客系统的环境搭建 http://49.235.129.183:8080/java109_blog_system/blog_list.html,即可访问我的小项目; 2. 确定测试用例 测试用例如下所示: 3. 关于登录的测试用例 3.1 初始化和退出浏览器 代码如下: package Blo…...
电商商品API接口系列(商品详情数据)商品比价、数据分析、自营商城上货
电商商品API接口系列中的商品详情数据接口,在商品比价、数据分析以及自营商城上货等方面发挥着重要作用。以下是对这些应用场景的详细分析: 一、商品详情数据接口概述 商品详情数据接口是电商平台上用于提供商品详细信息的API接口。这些接口允许开发者…...
排序算法总结(一)冒泡排序和选择排序
访问www.tomcoding.com网站,学习Oracle内部数据结构,详细文档说明,下载Oracle的exp/imp,DUL,logminer,ASM工具的源代码,学习高技术含量的内容。 冒泡排序 这个算法可以说是排序算法中最著名的…...

伺服电动缸
美国EXLAR原装K系列伺服缸 高精度运动,运动平稳,低噪音,高速度 向下翻动查看更多 力姆泰克伺服电动缸 k系列电动缸采用Exlar滚柱丝杠技术,提供多种不同性能等级的产品,可外配第三方电机。 通用型设计,无…...
深度学习中的logit到底是什么?
1. 问题 在做深度学习的过程中,经常会碰到logit。这个和在学校学的概率有出入,因而想弄明白这到底是个什么参数。 2. 使用logit的原因 定义几率(odds)和 logit 函数的主要原因在于使用了线性空间转换,使得非线性的概…...
idea使用记录
文章目录 1、idea调出maven窗口2、跳转到指定行 1、idea调出maven窗口 首先尝试菜单栏View→Tool Windows→Maven,如果没有maven那很有可能是idea没有识别到这是一个maven项目,此时可以尝试在项目的pom文件上右击,选择“add as maven projec…...
Python - HTTP servers
python的http.server模块用于HTTP服务器的功能,这个模块是python标准库的一部分,不需要pip install。 使用前需要import: import http.server 然后就可以编辑代码,使用此模块提供的接口,实现http server相关功能。 除…...
内网Debian\Ubuntu服务器安装dep包,基于apt-rdepends下载相关依赖
文章目录 背景一、下载依赖二、拷贝到内网三、 使用dpkg安装可能会遇到的问题 背景 由于生产服务器是Debian\Ubuntu系统且在内网环境(不联网),需要使用拷贝deb格式的包使用dpkg的方式进行安装。所以,需要现在联网的环境中将所需的…...
大模型——如何实现超长多轮对话
在自然语言处理的领域中,多轮对话系统是构建智能化交互应用的关键。无论是聊天机器人、虚拟助手,还是客户服务系统,能够保持连贯的对话并记住上下文信息是用户体验的核心。然而,大规模语言模型(如GPT等)的对…...

大数据面试-笔试SQL
一个表table: c_id u_id score;用SQL计算每个班级top5学生的平均分(腾讯) select class_id,avg(score) as score_avg from (select *,row_number() over(partition by class_id order by score desc) as score_rank from table ) t1 where t…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
Easy Excel
Easy Excel 一、依赖引入二、基本使用1. 定义实体类(导入/导出共用)2. 写 Excel3. 读 Excel 三、常用注解说明(完整列表)四、进阶:自定义转换器(Converter) 其它自定义转换器没生效 Easy Excel在…...
比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表
设计一个MySQL数据库和Clickhouse数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

使用VMware克隆功能快速搭建集群
自己搭建的虚拟机,后续不管是学习java还是大数据,都需要集群,java需要分布式的微服务,大数据Hadoop的计算集群,如果从头开始搭建虚拟机会比较费时费力,这里分享一下如何使用克隆功能快速搭建一个集群 先把…...

基于django+vue的健身房管理系统-vue
开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…...