力扣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;
	}
};
相关推荐
RTC老炮2 小时前
webrtc降噪-PriorSignalModelEstimator类源码分析与算法原理
算法·webrtc
草莓火锅4 小时前
用c++使输入的数字各个位上数字反转得到一个新数
开发语言·c++·算法
散峰而望4 小时前
C/C++输入输出初级(一) (算法竞赛)
c语言·开发语言·c++·算法·github
Kuo-Teng4 小时前
LeetCode 160: Intersection of Two Linked Lists
java·算法·leetcode·职场和发展
fie88894 小时前
基于MATLAB的狼群算法实现
开发语言·算法·matlab
偷偷的卷5 小时前
【算法笔记 11】贪心策略六
笔记·算法
ZPC82105 小时前
FPGA 部署ONNX
人工智能·python·算法·机器人
_w_z_j_5 小时前
爱丽丝的人偶
算法
老前端的功夫6 小时前
Vue2中key的深度解析:Diff算法的性能优化之道
前端·javascript·vue.js·算法·性能优化
yongui478347 小时前
基于深度随机森林(Deep Forest)的分类算法实现
算法·随机森林·分类