(leetcode学习)15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

提示:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

 第一次写的时候没想到先排序,写的确实是构式。

vector<vector<int>> threeSum(vector<int>& nums) {
	sort(nums.begin(), nums.end());
	vector<vector<int>> res;
	unordered_map<int, vector<vector<int>>> sum_2;
	unordered_map<string, int> res_m;
	for (int i = 0; i < nums.size(); i++) {
		for (int j = i + 1; j < nums.size(); j++) {
			if (sum_2.find(nums[j]) != sum_2.end())
			{
				vector<vector<int>> cur_vv = sum_2.find(nums[j])->second;
				for (int k = 0; k < cur_vv.size(); k++) {
					vector<int> cur_v = cur_vv[k], cur_res;
					if (j == cur_v[2] || j == cur_v[3]) continue;
					cur_res.push_back(nums[j]);
					cur_res.push_back(cur_v[0]);
					cur_res.push_back(cur_v[1]);
					sort(cur_res.begin(), cur_res.end());
				
					string cur_str = to_string(cur_res[0]) + to_string(cur_res[1]) + to_string(cur_res[2]);
					if (res_m.find(cur_str) == res_m.end()) {
						res.push_back(cur_res);
						res_m.insert(make_pair(cur_str, 1));
					}
				}
			}
			else {
				vector<int> cur_v = { nums[i], nums[j], i, j };
				int num = -nums[i] - nums[j];
				if (sum_2.find(num) == sum_2.end() ){
					vector<vector<int>> cur_vv;
					cur_vv.push_back(cur_v);
					sum_2.insert(make_pair(num, cur_vv));
				}
				else {
					sum_2.find(num)->second.push_back(cur_v);
				}
			}
		}
	}
	return res;
}

第二次用排序之后,用二重循环加哈希表,感觉是o(n)的复杂度,但是只打败很少的人,水平所限先就这样吧。

相关推荐

  1. LeetCode-15. 之和

    2024-07-18 11:38:03       61 阅读
  2. [LeetCode] 15. 之和

    2024-07-18 11:38:03       60 阅读
  3. LeetCode 15 之和

    2024-07-18 11:38:03       52 阅读
  4. leetcode15. 之和

    2024-07-18 11:38:03       55 阅读
  5. Leetcode15. 之和

    2024-07-18 11:38:03       46 阅读
  6. LeetCode 15. 之和

    2024-07-18 11:38:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 11:38:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 11:38:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 11:38:03       57 阅读
  4. Python语言-面向对象

    2024-07-18 11:38:03       68 阅读

热门阅读

  1. 快充控制单片机方案

    2024-07-18 11:38:03       18 阅读
  2. 音频数据集

    2024-07-18 11:38:03       19 阅读
  3. LeetCode两数之和

    2024-07-18 11:38:03       20 阅读
  4. postman接囗测试工具详解

    2024-07-18 11:38:03       23 阅读
  5. 三角形与四边形

    2024-07-18 11:38:03       17 阅读
  6. Kylin与BI工具的集成:深入解析与实践

    2024-07-18 11:38:03       25 阅读
  7. 排序之归并排序

    2024-07-18 11:38:03       16 阅读