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…...
希尔排序和直接插入排序
因为排序这些比较复杂点我就分几期给大家来讲~~~ 直接插入排序 直接插入排序是一种简单的排序算法,主要用于对少量数据进行排序。其基本思想是将待排序的元素逐个插入到已经排好序的部分中,从而形成一个有序序列。 具体步骤如下: 初始化&…...
IDEA 配置 Git 详解
本文将介绍在IntelliJ IDEA 中如何配置Git 没有安装配置 Git 的可以参考我的这篇文章:安装配置 Git 一、操作环境及准备 1.win 10 2.已安装且配置了Git 3.有Gitee账户 4.安装了IntelliJ IDEA 2023.2.1 5.全程联网 二、配置步骤 2.1 配置git 1.采用全局设置&…...
Docker 部署 Redis 监控系统实战:Redis Exporter 与 Prometheus 完整配置指南
Docker 部署 Redis 监控系统实战:Redis Exporter 与 Prometheus 完整配置指南 文章目录 Docker 部署 Redis 监控系统实战:Redis Exporter 与 Prometheus 完整配置指南一 缓存简述二 redis exporter 部署三 环境变量配置四 修改文件权限五 验证 exporter …...
高级算法设计与分析-MaxFlow网络流基础知识
MaxFlow网络流 1 网络流基础概念 source:源点 sink:终点 Flow:流量 capacity:容量 Residual:残量 Residual Network:残量网络 Augmenting path:增广路径,表示从源点 s 到终点 t 不包含环的路径 Bottleneck capacity:瓶颈容量 2 最大流 2.1 基础概念 2.2 增广路算法 …...
Java项目实战II基于Java+Spring Boot+MySQL的桂林旅游景点导游平台(源码+数据库+文档)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 桂林,以其独特的喀斯特地貌、秀美的自然风光闻名遐迩,每年吸引着无数国内外游…...
C语言-输入输出
实验一:编写一个输出两行自定义字符的 C 程序 一、实验目的 熟悉 C 语言的基本结构和语法。掌握 printf() 函数的使用方法。了解在 Code::Blocks 中编写、编译和运行程序的过程。 二、实验内容 编写一个 C 程序,要求输出两行字符,内容自定…...
如何在GitHub上传自己的项目?(一文看懂,每一步的操作和解决常见错误的方法)
目录 步骤一:准备 Git 环境 1. 安装 Git 2. 配置 Git 步骤二:在 GitHub 创建一个新的仓库 1. 登录到你的 GitHub 账号。 2. 点击右上角的 号,然后选择 New repository。 3. 填写以下信息: 步骤三:将本地项目上…...
数据结构_day1
目录 大纲 1.数据结构基础知识 1.1 什么是数据结构 1.2 数据 1.3 逻辑结构 1.4 存储结构 1.4.1 顺序存储 1.4.2 链式存储 1.4.3 索引存储结构 1.4.4 散列存储 1.5 操作 2.算法基础知识 2.1 什么是算法 2.2 算法的设计 2.3 算法的特性 2.4 评价算法的好坏 大纲 数据结构、算法(理…...
c# using 声明进行资源管理
在 C# 8 中,using 声明引入了一种新的语法,称为 using 声明,它使得开发人员在处理资源时的代码更加简洁和清晰。主要的变化包括 使用声明 和 使用上下文(using declaration) 的引入。 使用语句的简化 在 C# 8 中&…...
Kafka之基本概念
1、Kafka是什么? Kafka是由Scala语言开发的一个多分区、多副本,基于Zookeeper集群协调的系统。 那这个所谓的系统又是什么系统呢? 回答这个问题要从发展的角度来看:起初Kafka的定位是分布式消息系统。但是目前它的定位是一个分布…...
修改文章wordpress/小红书seo关键词优化多少钱
深度学习模型训练和关键参数调优详解一、模型选择1.回归任务人脸关键点检测2.分类任务图像分类3.场景任务目标检测人像分割文字识别二、模型训练1.基于高层API训练模型加载数据集模型封装训练参数配置模型训练2.使用PaddleX训练模型配置数据集初始化模型模型训练3.模型训练通用…...
网站建设技术方面的体会/杭州seo排名
我觉的应该不是靠每天的波动赚钱,而是先把大部分股票大致浏览一下,找出长期走势上升的股票,大致可以排除90%的股票,主要是要看周线,其次选出业绩好的股票,再排除90%的股票,大致在全部的沪深里面…...
广州注册公司核名在哪个网站/搜狗指数
下载 https://download.csdn.net/download/u013378306/13042616 在data目录下的predefined_classes.txt 添加自己要分类的名称,此处为dog,和cat 点击labelImg.exe启动程序...
关于企业网站建设的提案/关键词搜索推广
http://www.docin.com/p-210901712.html转载于:https://blog.51cto.com/260505/778487...
今天广西疫情最新消息/整站seo定制
像我们这种革命老同志,工作十几年,工作和生活都很忙,拖家带口的,想要获得一门证书,是件不容易的事,必须利用业余时间,争分夺秒,方能在学习的殿堂有一席之地,以达到成功的…...
wordpress 图文直播插件/品牌策划ppt案例
通过万岁!!! 题目:就是在一个升序的数组中,找到目标元素应该所在的位置。有可能与里面的内容相等,也有可能不等。思路:这个题目双指针就可以了,但是这是一个比较经典的题目…...