Leecode热题100---15:三数之和为零

server/2024/11/13 9:41:50/

题目:
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。
请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

C++:
双指针法:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();sort(nums.begin(), nums.end()); // 对数组进行排序,以便后续操作vector<vector<int>> answer; // 存储结果的二维向量for (int i = 0; i < n; i++) { // 遍历数组,固定第一个元素// 避免重复的固定元素if (i > 0 && nums[i] == nums[i - 1])continue;int left = i + 1; // 左指针指向固定元素的下一位int right = n - 1; // 右指针指向数组末尾while (left < right) {int sum = nums[i] + nums[left] + nums[right]; // 计算三个元素的和if (sum < 0) { // 如果和小于零,说明需要增大和,左指针右移一位left++;}else if (sum > 0) { // 如果和大于零,说明需要减小和,右指针左移一位right--;}else { // 和等于零,找到满足条件的三元组answer.push_back(vector<int>{ nums[i], nums[left], nums[right] }); // 将三元组添加到结果中cout << nums[i], nums[left], nums[right];// 避免重复的左指针元素while (left < right && nums[left] == nums[left + 1])left++;// 避免重复的右指针元素while (left < right && nums[right] == nums[right - 1])right--;left++; // 左指针右移一位right--; // 右指针左移一位}}}return answer;}
};int main()
{Solution S;vector<int> nums = { -1, 0, 1, 2, -1, -4 };vector<vector<int>> answers = S.threeSum(nums);
}

python:
思路:先排序,然后两边向中间靠拢。

class Solution():def threeSum(self,nums):nums.sort()  # 排序res = []for i in range(len(nums)):  # 遍历每一个数if i==0 or nums[i] > nums[i-1]:  # 确定不重复的数字(开头)l = i+1r = len(nums)-1while l<r:s = nums[i] + nums[l] + nums[r]if s == 0:res.append([nums[i],nums[l],nums[r]])l += 1r -= 1# 左边向右移动到不重复数为止while l<r and nums[l] == nums[l-1] :l += 1# 右边向左边移动不重复数为止while l<r and nums[r] == nums[r+1] :r -= 1elif s >0:r -= 1else:l += 1return res

http://www.ppmy.cn/server/41850.html

相关文章

搜维尔科技:【案例分享】Xsens用于工业制造艺术创新设计平台

用户名称&#xff1a;北京理工大学 主要产品&#xff1a;Xsens MVN Awinda惯性动作捕捉系统 在设计与艺术学院的某实验室内&#xff0c;通过Xsens惯性动作捕捉&#xff0c;对人体动作进行捕捉&#xff0c;得到人体三维运动数据&#xff0c;将捕到的数据用于后续应用研究。…

国学经典 书籍推荐

国学经典书籍浩如烟海&#xff0c;涵盖了哲学、历史、文学、语言学等多个方面&#xff0c;以下是一些被广泛认为是必读的经典推荐&#xff1a; 儒家经典 《论语》&#xff1a;记录孔子及其弟子言行&#xff0c;儒家思想的核心著作。《孟子》&#xff1a;孟子的言行录&#xff0…

【使用Condition来模拟生产消费】

使用Condition来模拟生产消费 1. 关于ReentrantLock 和condition的认知?2.使用condition实现生产者-消费者1. 关于ReentrantLock 和condition的认知? /*Q: ReentrantLock是如何实现管理锁和线程的?A: ReentrantLock是并发包中 一个类,它实现了Lock接口,提供了比内置synch…

Shopee、Lazada等平台怎么做测评?

最近有很多人咨询南哥跨境电商平台测评应该怎么做&#xff0c;今天我就针对东南亚站点&#xff0c;详细跟大家分享一下东南亚平台测评需要哪些资源 测评环境系统 不管做任何平台&#xff0c;首先你要有一个稳定的测评环境系统&#xff0c;测评环境系统的底层逻辑就是通过一台…

leetcode-字符串变形-104

题目要求 思路 1.首先根据ASCII的规则&#xff0c;把字符串大小写替换&#xff0c;空格保持不变 2.将整个字符串进行翻转 3.以空格为区间&#xff0c;将区间内的字符串进行翻转&#xff0c;其中翻转的函数reverse() 代码实现 class Solution { public:string trans(string s…

“普惠门诊保”24年升级回归! 您医保的有效商业补充!

2024年5月15日&#xff0c; “普惠门诊保如意版”正式官宣发布&#xff01; 2023年&#xff0c;中国人民财产保险股份有限公司湖南省分公司积极创新的惠民型商业补充医疗保险&#xff0c;推出湖南省内首款互联网门诊医疗保险“普惠门诊保” 2024年&#xff0c;在去年保障内容…

每日Attention学习1——Parallel Aggregation Pyramid Pooling Module

模块出处 [CVPR 23] [link] [code] PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers 模块名称 Parallel Aggregation Pyramid Pooling Module (PAPPM) 模块作用 多尺度特征提取&#xff0c;更大感受野 模块结构 模块代码 import torch imp…

PHP数值数组讲解,for循环及函数 遍历数组获取元素

源码 <?phpheader("Content-Type:text/html;Charsetutf8");//创建数值数组$arr1 array();//简化创建语法 $arr2 [];//通过索引为数组添加不同类型的元素$arr1[0] "zhangsan" ;//也可以乱序添加元素$arr1[2] 12 ;$arr1[1] true ; //true输出为1 f…