【C++初阶】 vector 在OJ中的使用
vector 在OJ中的使用:只出现一次的数字 和 杨辉三角 OJ
·
前言:
🎈博客专栏:C++
📚本篇内容:只出现一次的数字 和 杨辉三角 OJ
目录
一、只出现一次的数字
题目链接:136. 只出现一次的数字
题目描述:
给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
class Solution {
public:
int singleNumber(vector<int>& nums) {
// 初始化一个整数变量val为0,用于储存最终结果
int val=0;
// 使用范围for循环遍历输入的整数向量nums中的每一个元素
for(auto e:nums )
{
// 对当前元素e与val进行异或运算(XOR),并将结果赋值给val
// 异或运算具有以下性质:任何数与0异或结果为其本身,相同数异或结果为0
// 因此,向量中出现两次的数会在异或过程中抵消,最后剩下的就是只出现一次的那个数
val^=e;
}
// 返回经过异或运算后得到的结果,即向量中唯一出现一次的整数
return val;
}
};
二、杨辉三角OJ
题目链接:118. 杨辉三角
题目描述:
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
class Solution {
public:
vector<vector<int>> generate(int numRows)
{
vector<vector<int>>vv;
vv.resize(numRows);//设置二维向量 vv 的行数,
//这个操作并没有初始化这些子向量的大小,即它们的列数。
for(size_t i= 0;i<vv.size();i++)//计算整个容器有多少行
{
vv[i].resize(i+1,0);//每一行都设置成0
//每一行的第一列元素和最后一列元素设置成1
vv[i][0] = vv[i][vv[i].size()-1] = 1;
}
for(size_t i = 0;i<vv.size();i++)//vv.size()-1计算整个容器有多少行
{
for(size_t j= 0;j<vv[i].size();j++)//vv[i].size()-1计算整个容器有多少列
{
if(vv[i][j] == 0)
{
//在「杨辉三角」中,每个数是它左上方和右上方的数的和。
vv[i][j] = vv[i-1][j] +vv[i-1][j-1];
}
}
}
return vv;
}
};
本章完。
🔧本文修改次数:0
🧭更新时间:2024年4月5日
更多推荐
已为社区贡献1条内容
所有评论(0)