STL-vector练习题
118. 杨辉三角


思路:
杨辉三角有以下性质使我们要用到的:
● 每行数字左右对称,由 1 开始逐渐变大再变小,并最终回到 1。
● 第 n 行(从 0 开始编号)的数字有 n+1 项,前 n 行共有 2n(n+1)个数。
● 每个数字等于上一行的左右两个数字之和,可用此性质写出整个杨辉三角。即第 n 行的第 i 个数等于第 n−1 行的第 i−1 个数和第 i 个数之和。
代码:
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);// 按行数缩减每一行个数,并全部赋值为1}for(int a = 2;a < numRows ;++a){for(int b = 1;b < a ;++b){ // 每个数是左上方和右上方之和vv[a][b] = vv[a-1][b] + vv[a-1][b-1]; }}return vv;}
};
260. 只出现一次的数字 III

思路:
1、相同数异或结果是0
假设数组 nums 中只出现一次的元素分别是 x1和 x2。如果把 nums 中的所有元素全部异或起来,得到结果 x,那么一定有:x = x1 ^ x2 。这是因为 nums 中出现两次的元素都会因为异或运算的性质 a ^ b ^ b = a 抵消掉,那么最终的结果就只剩下 x1和 x2的异或和。
2、区分两个单值数字到两个数组
在异或操作中,只有当两个数字在某一位置上的二进制值不同,结果的该位置才会是1。因此,异或结果中为1的位表示了所有数字在该位上的差异。找到最后一个1的位,可以帮助我们区分数组中只出现一次的数字。通过最后一个1的位,我们可以将数组中的数字分成两组:一组在该位上为1,另一组在该位上为0。这两组数字在该位上的差异表明,至少有一个只出现一次的数字在该位上与其他数字不同。
3、找出异或值最后一个二进制为1的位置
a & (-a)可以获得a最低的非0位,但需要注意整形溢出,可以用unsigned int 类型接收。
▶ 例如:
● a的二进制原码是 0000 1010,这里最低非0位是从右往左第2位。
● -a在二进制中的表示是补码形式,即先按位取反再加1,取反得 1111 0101(反码),加1得 1111 0110(补码)。
● 原码(0000 1010) 与 补码(1111 0110) 做与运算(&),得 0000 0010,即原码 0000 1010的LSB(最低有效位)
▶ 我们发现:
● 原码最低非0位右边所有的0,经由取反后全部变为1,反码+1会导致这些1逐位发生进位并变为0,最终进位记到最低非0位
● 原最低非0位是1,取反后是0,进位到这一位0变成1,不再向左进位
● 原最低非0位左边的每一位经由取反后 和 原码 进行与运算必为0
4、处理这两个数组
对于提供的整数数组的其他数,相同的数在所找到的mask位置的二进制数肯定是相同的,所以会被分到同一个数组。分别对两个数组进行异或操作就能得到最终两个单值。
代码:
class Solution {
public:vector<int> singleNumber(vector<int>& nums) {//取反操作就会在无符号整数的范围内进行,//对-2,147,483,648 这个最小值取反时,会超出了int类型能表示的范围unsigned int xornum = 0;// 全部异或,相同的数会被异或成0for (int n : nums) {xornum ^= n;}// mask掩码:找出异或值最后一个二进制为1的数字 (重要位置)int mask = xornum & (-xornum);// 使用 vector 来存储结果vector<int> res(2, 0); // 如果要用数组存储,最后返回值要写改成vector ://int res[2] = {0, 0};...//return vector<int> {res[0],res[1]};for (int n : nums) {if ((n & mask) == 0) {// 重要位置的数字是0,放在数组中全部异或,会剩下一个单值res[0] ^= n;} else {// 重要位置的数字是1,放在数组中全部异或,会剩下另一个单值res[1] ^= n;}}return res;}
};
137. 只出现一次的数字 II

思路:
考虑数字的二进制形式,对于出现三次的数字,各二进制位出现的次数都是3的倍数。因此,统计所有数字的各二进制位中1的出现次数,并对3求余,结果为出现一次的数字。
方法:遍历统计
● 使用与运算,可获取二进制数字n的最右一位n1: n1 = n&i
● 配合右移操作,可获取n的所有为的值:n = n >> 1
● 建立一个32位的数组counts,通过以上方法可记录所有数字的各二进制位的 1 的出现次数
int[] counts = new int[32];
for(int i = 0; i < nums.length; i++) {for(int j = 0; j < 32; j++) {counts[j] += nums[i] & 1; // 更新第 j 位nums[i] >>= 1; // 第 j 位 --> 第 j + 1 位}
}
● 将counts各元素对3求余,成三出现的数字在%3操作后没有余数,则结果为“只出现一次的数字”的二进制位。
for(int i = 0; i < 32; i++) {counts[i] %= 3; // 得到 只出现一次的数字 的第 (31 - i) 位
}
● 利用左移操作和或运算,可将counts数组中个二进制位的值恢复到数字res上。
for(int i = 0; i < counts.length; i++) {res <<= 1; // 左移 1 位res |= counts[31 - i]; // 恢复第 i 位的值到 res
}
代码:
class Solution {
public:int singleNumber(vector<int>& nums) {vector<int> counts(32,0);for(int n : nums){for(int j = 0;j < 32 ; j++){//n的最低位是0,那么n&1的结果是0//n的最低位是1,那么n&1的结果是1counts[j] += n & 1;//统计该位二进制数是1的个数//>>> 是一个无符号右移操作符,与有符号右移操作符 >> 不同的是,//无符号右移不考虑符号位,无论 num 是正数还是负数,左边空出的位都填充 0。n >>= 1;//从右向左依次取二进制数}}//成三出现的数字在%3操作后没有余数,只留下那个只出现一次的数字的二进制表示for(int i = 0;i < 32;i++){counts[i] %= 3;}int res = 0;for(int i = 0;i < 32;i++){//左移:最右边空出的位会被填充为0(无符号数)或保持符号位的值(有符号数)res <<= 1;res |= counts[31 - i];//或运算:比较的位中至少有一个为1,则结果位为1// 这里是31 - i,要注意二进制数存储的先后}return res;}
};
26. 删除有序数组中的重复项

左右指针即可!
代码:
class Solution {
public:int removeDuplicates(vector<int>& nums) {if(nums.size() == 0)return 0;int left = 1,right = 1;while(right < nums.size()){if(nums[right] != nums[right-1]){nums[left++] = nums[right];}++right;}return left;}
};
JZ39 数组中出现次数超过一半的数字
数组中出现次数超过一半的数字_牛客题霸_牛客网

思路:
用计数排序的思想,numbers数组的值与counts数组下标相同时对counts[ ]进行计数,最后将存储的计数与原数组长度的一半进行对比。
注意这里创建新数组要开辟动态的,根据所给数组的最大值进行创建。
代码:
#include <algorithm>
class Solution {
public:int MoreThanHalfNum_Solution(vector<int>& numbers) {if (numbers.empty()) return 0;//动态数组int maxnum = 0;for(int m : numbers){// 找到数组中的最大值maxnum = max(maxnum,m);}//初始化数组vector<int> counts(maxnum + 1,0);for(int i :numbers){// 计数counts[i]++;}for(int j = 0; j < counts.size();j++){if(counts[j] > numbers.size()/2){return j;}}return 0;}
};
17. 电话号码的字母组合(666)

思路:
对于示例1,我们利用树的形式表示出来,但实现这个过程要用到递归的思想。
维护一个字符串,表示已有的字母排列,该字符串初始为空。每次取电话号码的一位数字,从字符串数组中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面。(即一个一个取第一个号码对应的字母,并与另一个号码对应字母一个一个结合)然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字。

代码:
class Solution {string Number[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; //深度优先遍历,递归实现,像树一样往深找void dfs(int i,int len, string digits,string& path,vector<string>& ans){if(i == len){//直到找到所有组合ans.push_back(path);//两两组合后尾插到动态数组return;}for(auto e : Number[digits[i] - '0'])//根据下标找到对应数字的字符串{path[i] = e;dfs(i+1,len,digits,path,ans);//注意这里是+1,不是++,用来维护一个字符串}}
public:vector<string> letterCombinations(string digits) {int len = digits.length();if(len == 0)return {};vector<string> ans;string path(len,0);dfs(0,len,digits,path,ans);return ans;}
};
这一篇写了好久~ (ಥ﹏ಥ) (ಥ﹏ಥ) (ಥ﹏ಥ)
相关文章:
STL-vector练习题
118. 杨辉三角 思路: 杨辉三角有以下性质使我们要用到的: ● 每行数字左右对称,由 1 开始逐渐变大再变小,并最终回到 1。 ● 第 n 行(从 0 开始编号)的数字有 n1 项,前 n 行共有 2n(n1)个数。…...
Leetcode 165. 比较版本号(Medium)
给你两个 版本号字符串 version1 和 version2 ,请你比较它们。版本号由被点 . 分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。 比较版本号时,请按 从左到右的顺序 依次比较它们的修订号。如果其中一个版本字符串的修订号较少,…...
Android 12 Launcher3 去掉Hotseat
1.概述 在12.0 产品定制化开发中 由产品需求Launcher3 页面布局的原因,要求Launcher3 需要去掉Hotseat 不显示Hotseat下面几个图标,而做满屏app的显示,从而达到美观的效果,下面就来分析去掉Hotseat从而实现这个功能 2.Launcher3 …...
Nginx实用篇:实现负载均衡、限流与动静分离
Nginx实用篇:实现负载均衡、限流与动静分离 | 原创作者/编辑:凯哥Java | 分类:Nginx学习系列教程 Nginx 作为一款高性能的 HTTP 服务器及反向代理解决方案,在互联网架构中扮演着至关重要的角色。它…...
python | Python中的类多态:方法重写和动态绑定
本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。 原文链接:Python中的类多态:方法重写和动态绑定 多态(Polymorphism)是面向对象编程的核心特性之一,它允许同一接口在…...
Rust编写Windows服务
文章目录 Rust编写Windows服务一:Windows服务程序大致原理二:Rust中编写windows服务三:具体实例 Rust编写Windows服务 编写Windows服务可选语言很多, 其中C#最简单。本着练手Rust语言,尝试用Rust编写一个服务。 一:Win…...
MATLAB 从 R2024B 开始支持树莓派 5
树莓派(Raspberry Pi)系列是一系列基于单板计算机的微型电脑,由英国的树莓派基金会于 2012 年开始发布。它的目标是提供一个低成本、易于学习和玩耍的平台,用于教育和初学者学习计算机科学和编程。 目前市面上,最新最…...
MiniBlogum项目简介
MiniBlogum项目简介 文章目录 MiniBlogum项目简介一、引言二、技术栈与开发环境三、主要功能(一)用户注册与登录(二)查看当前登录用户/作者头像、昵称、Gitee仓库地址(三)查看博客列表(四&#…...
如何用 OBProxy 实现 OceanBase 的最佳路由策略
引言 OBProxy,即OceanBase Database Proxy,也简称为ODP,是 OceanBase数据库的专属服务代理。通过应用OBProxy,由后端OceanBase集群的分布式特性所带来的复杂性得以屏蔽,从而使得访问分布式数据库的体验如同访问单机数…...
new/delete和malloc/free到底有什么区别
new和malloc 文章目录 new和malloc前言一、属性上的区别二、使用上的区别三、内存位置的区别四、返回类型的区别五、分配失败的区别六、扩张内存的区别七、系统调度过程的区别总结 前言 new和malloc的知识点,作为一个嵌入式工程师是必须要了解清楚的。new和malloc的…...
Flutter启动无法运行热重载
当出现这种报错时,大概率是flutter的NO_Proxy出问题。 请忽略上面的Android报错因为我做的是windows开发这个也就不管了哈,解决下面也有解决报错的命令大家执行一下就行。 着重说一下Proxy的问题, 我们看到提示NO_PROXY 没有设置。 这个时候我…...
CSS调整背景
一、设置背景颜色 通过 background-color 属性指定,值可以是十六进制 #ffffff,也可以是rgb(0, 255, 255),或是颜色名称 "red" div {background-color: red; /* 通过颜色名称设置 */background-color: #ff0000; /* 通过十六进制设…...
FinalShell连接Linux服务器并解决反复输入密码问题
FinalShell是一款由国人开发的SSH客户端工具,它支持多平台,包括Windows、Mac OS X和Linux。FinalShell主要用于一体化服务器管理,它不仅是一个SSH客户端,还具备强大的开发和运维功能,能够充分满足开发和运维的需求。 本…...
实用类工具!分享6款AI论文一键生成器免费8000字
在当前的学术研究和写作领域,AI论文生成工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿,还能进行内容优化、查重和排版等操作。千笔-AIPassPaper是一款备受推荐的AI论文一键生成器。 千笔-AIPassPaper是一个一站式…...
vue使用TreeSelect设置带所有父级节点的回显
Element Plus的el-tree-select组件 思路: 选中节点时,给选中的节点赋值 pathLabel,pathLabel 为函数生成的节点名字拼接,数据源中不包含。 在el-tree-select组件中设置 props“{ label: ‘pathLabel’ }” 控制选中时input框中回…...
智能机巢+无人机:自动化巡检技术详解
智能机巢与无人机的结合,在自动化巡检领域展现出了巨大的潜力和优势。以下是对这一技术的详细解析: 一、智能机巢概述 智能机巢,也被称为无人机机场或无人机机巢,是专门为无人机提供停靠、充电、维护等服务的智能化设施。它不仅…...
摩托车加装车载手机充电usb方案/雅马哈USB充电方案开发
长途骑行需要给手机与行车记录仪等设备供电,那么,加装USB充电器就相继在两轮电动车上应用起来了。摩托车加装usb充电方案主要应用于汽车、电动自行车、摩托车、房车、渡轮、游艇等交通工具。提供电动车USB充电器方案/摩托车加装usb充电方案/渡轮加装usb充…...
进阶岛 任务3: LMDeploy 量化部署进阶实践
进阶岛 任务3: LMDeploy 量化部署进阶实践 任务:https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/LMDeploy/task.md 使用结合W4A16量化与kv cache量化的internlm2_5-1_8b-chat模型封装本地API并与大模型进行一次对话,作业截图需包…...
vue 使用jszip,file-saver下载压缩包,自定义文件夹名,文件名打包下载为zip压缩包文件,全局封装公共方法使用。
记录一下后台管理全局封装一个压缩包下载方法,文件夹名自定义,文件名自定义,压缩包名自定义。 安装必要的库 npm install jszip npm install file-saver自定义一个公共方法全局注入 页面使用 /** 下载按钮操作 */handleDownload() {const i…...
计网八股文
1.HTTP和HTTPS的区别 安全性: HTTP:是未加密的协议,意味着数据在传输过程中可以被截获、篡改或监听。它不提供任何数据加密。HTTPS:在HTTP的基础上加入了SSL/TLS协议,提供了数据加密、完整性校验和身份验证。这使得传输…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

