当前位置:网站首页>力扣每日一题-第47天-15. 三数之和
力扣每日一题-第47天-15. 三数之和
2022-08-04 05:44:00 【重邮研究森】
2022.8.3今天你刷题了吗?
题目:
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
分析:
给定一个数组,我们需要找到三个数加起来为0的三个数,并且最后返回时不能有重复。那么对于这个问题,思路是:
首先利用一个二维数组来存放满足加起来=0的数,找到了这些数之和,对二维数组进行清除重复元素操作,最终得到我们的结果。在找元素时,利用暴力法,依次遍历数组,找到满足的所有元素,对于重复元素去除,可以利用文中那个简单的两行代码完成。
解析:
1.暴力法
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int tmp = 0;
int temp = 0;
int flag = 0;
int x = 0;
vector<int>vec1;
vector<vector<int>>vec;
if (nums.size() == 0)
{
return vec;
}
for (int i = 0; i < nums.size()-2; i++)
{
for (int j = i+1; j < nums.size(); j++)
{
tmp = 0 - nums[i] - nums[j];
temp = nums[j];
x = j;
while (x < nums.size())
{
if (x < nums.size()-1&&tmp == nums[x+1])
{
vec1.push_back(tmp);
vec1.push_back(temp);
vec1.push_back(nums[i]);
sort(vec1.begin(), vec1.end());
vec.push_back(vec1);
vec1.clear();
break;
}
x++;
}
}
}
//清楚重复元素
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());
return vec;
}
};
2.指针法
这是官方的双指针
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
// 枚举 a
for (int first = 0; first < n; ++first) {
// 需要和上一次枚举的数不相同
if (first > 0 && nums[first] == nums[first - 1]) {
continue;
}
// c 对应的指针初始指向数组的最右端
int third = n - 1;
int target = -nums[first];
// 枚举 b
for (int second = first + 1; second < n; ++second) {
// 需要和上一次枚举的数不相同
if (second > first + 1 && nums[second] == nums[second - 1]) {
continue;
}
// 需要保证 b 的指针在 c 的指针的左侧
while (second < third && nums[second] + nums[third] > target) {
--third;
}
// 如果指针重合,随着 b 后续的增加
// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环
if (second == third) {
break;
}
if (nums[second] + nums[third] == target) {
ans.push_back({nums[first], nums[second], nums[third]});
}
}
}
return ans;
}
};
边栏推荐
- this关键字,构造函数
- MySQL配置文件配置
- 七夕专属程序员的浪漫
- 格拉姆角场GAF将时序数据转换为图像并应用于故障诊断
- MMDeploy部署实战系列【第三章】:MMdeploy pytorch模型转换onnx,tensorrt
- “需求370解决解决爬取章节之后主题讨论评论消失问题”工作总结
- Network skills: teach you to install batteries on the router, you can still surf the Internet when the power is cut off!
- What is the connection between GRNN, RBF, PNN, KELM?
- 如何用matlab做高精度计算?【第二辑】
- 在线公众号文章内容转音频文件实用小工具
猜你喜欢
90多款matlab工具箱打包放送
ThreadLocal内存泄漏问题讲解
Centos通过Docker搭建MySQL的PXC集群
A semi-supervised Laplace skyhawk optimization depth nuclear extreme learning machine for classification
如何用matlab做高精度计算?【第三辑】(完)
SENet detailed explanation and Keras reproduction code
matlab封闭曲线拟合 (针对一些列离散点)
IoU, GIoU, DIoU and CIoU in target detection
HbuilderX 启动微信小程序 无法打开项目
EfficientNet解读:神经网络的复合缩放方法(基于tf-Kersa复现代码)
随机推荐
科研绘图图表类型种类繁多,本文告诉你如何选择!
VMD结合ISSA优化LSSVM功率预测
指定区域内随机填充圆之matlab实现
VMD combined with ISSA to optimize LSSVM power prediction
网页中常用的两种绘图技术,用canvas绘图,绘制出一个三角形,矩形,柱状图,扇形图
IDEA 控制台 中文乱码问题(如果网上教程都无法解决你的问题的话)
MATLAB版量化交易技术分析工具TA-Lib【不付费也可获取,不要被付费吓跑】
【音视频开发系列】QT 采集麦克风PCM并播放
matlab的2DCNN、1DCNN、BP、SVM故障诊断与结果可视化
系统流量预估、架构设计方案
Interpretation of EfficientNet: Composite scaling method of neural network (based on tf-Kersa reproduction code)
DenseNet详解及Keras复现代码
2DCNN, 1DCNN, BP, SVM fault diagnosis and result visualization of matlab
MAML原理讲解和代码实现
HbuilderX 启动微信小程序 无法打开项目
Software: Recommend a domestic and very easy-to-use efficiency software uTools to everyone
七夕专属程序员的浪漫
A semi-supervised Laplace skyhawk optimization depth nuclear extreme learning machine for classification
53个全球免费学术资源数据库整理,查资料写论文必备【开学必备】
mysql:列类型之float、double