三数之和——力扣15

文章目录

      • 题目描述
      • 法一 双指针+排序

题目描述

三数之和——力扣15_第1张图片
三数之和——力扣15_第2张图片

法一 双指针+排序

三数之和——力扣15_第3张图片
三数之和——力扣15_第4张图片

class Solution{
public:
	vector<vector<int>> threeSum(vector<int>& nums){
		int n=nums.size();
		vector<vector<int>> ans;
		sort(nums.begin(), nums.end());
		for(int first=0;first<n;first++){
			if(first>0 && nums[first]==nums[first-1]){  //需要和上次枚举的数不同 
				continue;
			}
			int third=n-1;   //c对应的指针指向数组的最右端 
			int target = -nums[first];
			for(int second=first+1;second<n;second++){
				if(second>first+1 && nums[second]==nums[second-1]){  //需要和上次枚举的数不同 
					continue;
				}
				while(second<third && nums[second]+nums[third]>target){  // 需要保证 b 的指针在 c 的指针的左侧
					third--;
				}
				if(second==third){   // 指针重合,退出循环 
					break;
				}
				if(nums[second]+nums[third]==target){
					ans.push_back({nums[first], nums[second], nums[third]});
				}
			}	
		}
		return ans;
	}
}; 

三数之和——力扣15_第5张图片

你可能感兴趣的:(算法刷题笔记,leetcode,算法,数据结构,c++,职场和发展,链表)