三数之和不会做?暴力解决它!!!

前言

这道题在力扣中是一道中等题,题目见下:

我在这里并不是在刷力扣,因为我只是做题,但并不按照题目要求的时间复杂度来解题。

正文

下面我将详细介绍我关于这题的解法。

我的思路其实很简单,就是想着怎么不费脑子怎么来,这里的"脑子"指的是我的脑子,至于电脑的脑子------时间复杂度出于对我脑子的考虑,我就不考虑它了(狗头)。

初步思路

刚开始我是想着遍历所有可能,然后根据判断语句决定是否输出。事实我也是这么干的,代码放在下面:

ini 复制代码
//双指针法
#include<iostream>
using namespace std;
void main()
{
	int a[] = { -1, 0, 1, 2, -1, -4 };
	int n = sizeof(a) / sizeof(int);
    
	for (int i = 0; i < n - 2; i++)
	{
		for (int j = i + 1; j < n - 1; j++)
		{
			for (int k = j + 1; k < n; k++)
			{
				if (a[i] + a[j] + a[k] == 0)
				{
					cout << "[" << a[i] << "," << a[j] << "," << a[k] << "]" << endl;
					break;
				}
			}
		}
	}
}

在这时,我遇到了一些问题:

可以看到,在运行结果时,三元组出现重复,但是根据题目要求需要消除。所以这种思路是不完善的,后面经过思考,将思路进行完善,最终解决了这个问题。

完善思路

现在的问题就变成了"去重"。

在上一步的运行结果可以看到,第一个三元组和第三个三元组重复,当重复的时候,我们如果将三元组进行排序,那么这两个重复的三元组对应位置的元素就会相等,这样就可以设置条件限制输出从而解决这个问题。

将三元组排序还是有点费脑子,主要是头脑中第一出现的想法就是将原数组进行排序,所以后面也就懒得想了。所以我将原数组进行冒泡升序,然后又定义了一个新数组吧b[3]用来存放满足条件的三元组。不难知道在进行这样处理后,重复的三元组必定一前一后,也就是说重复的三元组如果要输出的话必定是紧挨着的。所以就先令三元组输出,然后将输出的三元组存放在b[3]中,在下一次输出前,将要输出的三元组和b[3]中元素比较,如果一致则限制输出,问题至此也完美的解决了。代码放在下面供参考:

css 复制代码
//双指针法
#include<iostream>
using namespace std;
void main()
{
	int a[] = { -1, 0, 1, 2, -1, -4 };
	int b[3] = { -1 };
	int n = sizeof(a) / sizeof(int);

	for (int i = 0; i < n - 1; i++)
	{
		for(int j=0;j<n-i-1;j++)
			if (a[j] > a[j + 1])
			{
				int temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
	}

	for (int i = 0; i < n - 2; i++)
	{
		for (int j = i + 1; j < n - 1; j++)
		{
			for (int k = j + 1; k < n; k++)
			{
				if (a[i] + a[j] + a[k] == 0)
				{
					if (b[0] != a[i] || b[1] != a[j] || b[2] != a[k])
						cout << "[" << a[i] << "," << a[j] << "," << a[k] << "]" << endl;
					b[0] = a[i]; b[1] = a[j]; b[2] = a[k];
					break;
				}
			}
		}
	}
}

运行结果同样贴在下面:

相关推荐
内存不泄露5 分钟前
基于Spring Boot和Vue 3的智能心理健康咨询平台设计与实现
vue.js·spring boot·后端
qq_12498707536 分钟前
基于Spring Boot的电影票网上购票系统的设计与实现(源码+论文+部署+安装)
java·大数据·spring boot·后端·spring·毕业设计·计算机毕业设计
散峰而望8 分钟前
【算法竞赛】顺序表和vector
c语言·开发语言·数据结构·c++·人工智能·算法·github
麦兜*10 分钟前
【Spring Boot】 接口性能优化“十板斧”:从数据库连接到 JVM 调优的全链路提升
java·大数据·数据库·spring boot·后端·spring cloud·性能优化
蛐蛐蜉蝣耶17 分钟前
Spring Boot实现DynamicMethodMatcherPointcut示例
java·spring boot·后端
cpp_250121 分钟前
B3927 [GESP202312 四级] 小杨的字典
数据结构·c++·算法·题解·洛谷
予枫的编程笔记23 分钟前
Elasticsearch聚合分析与大规模数据处理:解锁超越搜索的进阶能力
java·大数据·人工智能·分布式·后端·elasticsearch·全文检索
Cx330❀24 分钟前
《C++ 递归、搜索与回溯》第2-3题:合并两个有序链表,反转链表
开发语言·数据结构·c++·算法·链表·面试
码农小卡拉25 分钟前
Springboot “钩子”:@PostConstruct注解
java·spring boot·后端·spring·spring cloud
William_cl33 分钟前
ASP.NET Core ViewData:弱类型数据交互的精髓与避坑指南
后端·asp.net·交互