LeetCode题解之 3Sum

本文介绍了一种使用哈希表解决三数之和问题的算法实现,该方法虽然不是最优解,但思路简单直观。通过对输入数组进行排序并利用哈希表查找补数,有效地找到了所有和为0的三元组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、题目描述

2、问题分析

使用hashtable 的方法做,解法不是最优的,思路简单直观。

 

3、代码

 1 vector<vector<int>> threeSum(vector<int>& nums) {
 2         vector<vector<int>> result ;
 3      
 4         if( nums.size()  < 3 ){
 5             return result ;
 6         }  
 7         
 8         sort(nums.begin() ,nums.end());
 9         map<int,int> m;
10         for( int i = 0;i <nums.size() ; ++i){
11             m[nums[i]] = i;
12         }
13         
14         for( int i = 0; i < nums.size() - 2; ++i){
15             if( i > 0 && nums[i]  == nums[i-1] ) continue;
16             for( int j = i+1; j < nums.size() - 1; j++ ){
17                 if( j > i+1 && nums[j] == nums[j-1]) continue ;
18                 auto it = m.find( -(nums[i] + nums[j]) );
19                 if( it != m.end() && it->second > j ){
20                     vector<int> r{nums[i],nums[j],it->first};
21                     result.push_back( r );
22                 }
23             }
24         }
25         
26         return result;
27         
28     }

 

转载于:https://www.cnblogs.com/wangxiaoyong/p/9308650.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值