力扣3数之和

javascript 复制代码
class Solution {
public:
	vector<vector<int>> threeSum(vector<int>& nums) {
		vector<vector<int>> vecNum;

		sort(nums.begin(), nums.end());

		if (nums[0] > 0 || nums.size() < 3)
		{
			return vecNum;
		}

		int i = 0;
		int k = 0;
		int j = 0;

		for (int nIndex = 0; nIndex < nums.size() - 2; nIndex++)
		{
			if (nIndex != 0)
			{
				// 索引i的去重处理
				if (nums[i] == nums[nIndex])
				{
					continue;
				}
			}

			i = nIndex;
			k = nIndex + 1;
			j = nums.size() - 1;

			if (nums[i] <= 0)
			{
				while (i != j && j != k && i != j && k < j)
				{
					int num = nums[i] + nums[k] + nums[j];
					if (num > 0)
					{
						
						j--;
					}
					else if (num < 0)
					{
						k++;
					}
					else
					{
						// 只有只和等于0的时候才进行去重处理
						vecNum.push_back({ nums[i], nums[k], nums[j] });
						// 索引j的去重处理
						while (1)
						{
							j--;

							if (j <= k || nums[j] != nums[j + 1])
							{
								break;
							}
						}

						// 索引k的去重处理
						while (1)
						{
							k++;

							if (k >= j || nums[k] != nums[k - 1]  )
							{
								break;
							}
						}
					}
				}
			}
		}

		return vecNum;
	}
};
相关推荐
2401_8437852326 分钟前
C语言 扫雷程序设计
c语言·算法
qystca29 分钟前
炸弹 (boom.c)
算法
pen-ai32 分钟前
【LeetCode】4. 去重的效率提升
算法·leetcode·哈希算法
Tisfy33 分钟前
LeetCode 3019.按键变更的次数:遍历(转小写)
算法·leetcode·字符串·题解·遍历
无限码力43 分钟前
目标值子矩阵的数量
c++·算法·矩阵
ChoSeitaku1 小时前
No.6十六届蓝桥杯备战|赋值操作符|连续赋值|复合赋值|类型转换|强制|混合|赋值(C++)
c++·算法·蓝桥杯
勤劳的进取家1 小时前
区别:支持向量机 (SVM) 和逻辑回归
算法·支持向量机·逻辑回归
萌の鱼1 小时前
leetcode 2279. 装满石头的背包的最大数量
数据结构·c++·算法·leetcode
S-X-S2 小时前
算法解析-经典150(图论、回溯法)
算法·深度优先·图论