大数据之三数之和
题目描述
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
题目解析
题目需要我们找出三个数且和为 0 ,那么除了三个数全是 0 的情况之外,肯定会有负数和正数,所以一开始可以先选择一个数,然后再去找另外两个数,这样只要找到两个数且和为第一个选择的数的相反数就行了。也就是说需要枚举 a 和 b ,将 c 的存入 map 即可。
需要注意的是返回的结果中,不能有有重复的结果。这样的代码时间复杂度是 O(n^2)。在这里可以先将原数组进行排序,然后再遍历排序后的数组,这样就可以使用双指针以线性时间复杂度来遍历所有满足题意的两个数组合。
代码实现
class Solution {
public:
vector> threeSum(vector& nums) {
vector> res;
sort(nums.begin(), nums.end());
if (nums.empty() || nums.back() < 0 || nums.front() > 0) return {};
for (int k = 0; k < nums.size(); ++k) {
if (nums[k] > 0) break;
if (k > 0 && nums[k] == nums[k - 1]) continue;
int target = 0 - nums[k];
int i = k + 1. j = nums.size() - 1;
while (i < j) {
if (nums[i] + nums[j] == target) {
res.push_back({nums[k], nums[i], nums[j]});
while (i < j && nums[i] == nums[i + 1]) ++i;
while (i < j && nums[j] == nums[j - 1]) --j;
++i; --j;
} else if (nums[i] + nums[j] < target) ++i;
else --j;
}
}
return res;
}
};
相关推荐HOT
更多>>大数据之蛇形矩阵
我们最终要输出的是以蛇形摆放之后的字符串再按行串联在一起之后的结果,也就是说每一个字母摆放的列并不重要,重要的是摆放的行号。我们可以很...详情>>
2022-12-07 20:58:39大数据之两数相加
大数据通常包含的数据集的大小超出了常用软件工具在可容忍的经过时间内捕获、整理、管理和处理数据的能力。大数据哲学包含非结构化,半结构化和...详情>>
2022-12-07 20:56:39设计一个实时的流式计算Wordcount
使用Kafka对接SparkStreaming计算,那么要保证数据不丢失,和不重复的话,要使用直连方式,并且保证一次性语义,手动管理Offset即可,那么在实...详情>>
2022-12-07 20:54:49大数据之最长回文串
大数据通常包含的数据集的大小超出了常用软件工具在可容忍的经过时间内捕获、整理、管理和处理数据的能力。大数据哲学包含非结构化,半结构化和...详情>>
2022-12-07 20:51:53两两交换链表中的节点
大数据通常包含的数据集的大小超出了常用软件工具在可容忍的经过时间内捕获、整理、管理和处理数据的能力。大数据哲学包含非结构化,半结构化和...详情>>
2022-12-07 20:46:54大数据培训问答更多>>
新大数据都学什么?5大核心知识必学内容有哪些
新大数据报班多少钱?如何选择培训机构
新人工智能学什么?自学可以成才吗
新数据处理包括哪些内容?是不是所有课程需要分别报课
新大数据分析需要学什么?怎么学比较好
新人工智能专业学什么?人工智能有哪些课程
新大数据数据分析师要学什么?好就业吗
大数据面试题库 更多>>
大数据的五个V是什么?
数据及集群管理(三)
数据及集群管理(二)
数据及集群管理(一)
大数据之hbase的优化读数据方面
大数据之hbase的优化写入数据方面
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 南昌校区
- 哈尔滨校区