vector<vector<int>> threeSum(vector<int>& nums) {
set<string> seen;
vector<vector<int>> result;
int n = nums.size();
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if ((long long)nums[i] + nums[j] + nums[k] == 0) {
vector<int> triple = {nums[i], nums[j], nums[k]}; sort(triple.begin(), triple.end());
string key = to_string(triple[0]) + "," + to_string(triple[1]) + "," + to_string(triple[2]);
if (!seen.count(key)) {
seen.insert(key);
result.push_back(triple);
}
}
}
}
}
return result;
}
public List<List<Integer>> threeSum(int[] nums) {
Set<String> seen = new HashSet<>();
List<List<Integer>> result = new ArrayList<>();
int n = nums.length;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if ((long) nums[i] + nums[j] + nums[k] == 0) {
int[] t = {nums[i], nums[j], nums[k]}; Arrays.sort(t);
List<Integer> triple = List.of(t[0], t[1], t[2]);
String key = t[0] + "," + t[1] + "," + t[2];
if (!seen.contains(key)) {
seen.add(key);
result.add(triple);
}
}
}
}
}
return result;
}
def three_sum(nums: list[int]) -> list[list[int]]:
seen: set[str] = set()
result: list[list[int]] = []
n = len(nums)
for i in range(n):
for j in range(i + 1, n):
for k in range(j + 1, n):
if nums[i] + nums[j] + nums[k] == 0:
triple = sorted([nums[i], nums[j], nums[k]])
key = ','.join(map(str, triple))
if key not in seen:
seen.add(key)
result.append(triple)
return result
function threeSum(nums: number[]): number[][] {
const seen = new Set<string>();
const result: number[][] = [];
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
for (let k = j + 1; k < nums.length; k++) {
if (nums[i] + nums[j] + nums[k] === 0) {
const triple = [nums[i], nums[j], nums[k]].sort((a, b) => a - b);
const key = triple.join(',');
if (!seen.has(key)) {
seen.add(key);
result.push(triple);
}
}
}
}
}
return result;
}
vector<vector<int>> threeSum(vector<int>& nums) {
vector<int> sorted(nums); sort(sorted.begin(), sorted.end());
vector<vector<int>> result;
int n = sorted.size();
for (int i = 0; i < n - 2; i++) {
if (i > 0 && sorted[i] == sorted[i - 1]) continue;
unordered_set<long long> seen;
for (int j = i + 1; j < n; j++) {
long long need = -(long long)sorted[i] - sorted[j];
if (seen.count(need)) {
result.push_back({sorted[i], (int)need, sorted[j]});
while (j + 1 < n && sorted[j] == sorted[j + 1]) j++;
}
seen.insert(sorted[j]);
}
}
return result;
}
public List<List<Integer>> threeSum(int[] nums) {
int[] sorted = nums.clone(); Arrays.sort(sorted);
List<List<Integer>> result = new ArrayList<>();
int n = sorted.length;
for (int i = 0; i < n - 2; i++) {
if (i > 0 && sorted[i] == sorted[i - 1]) continue;
Set<Long> seen = new HashSet<>();
for (int j = i + 1; j < n; j++) {
long need = -(long) sorted[i] - sorted[j];
if (seen.contains(need)) {
result.add(List.of(sorted[i], (int) need, sorted[j]));
while (j + 1 < n && sorted[j] == sorted[j + 1]) j++;
}
seen.add((long) sorted[j]);
}
}
return result;
}
def three_sum(nums: list[int]) -> list[list[int]]:
s = sorted(nums)
result: list[list[int]] = []
for i in range(len(s) - 2):
if i > 0 and s[i] == s[i - 1]: continue
seen: set[int] = set()
j = i + 1
while j < len(s):
need = -s[i] - s[j]
if need in seen:
result.append([s[i], need, s[j]])
while j + 1 < len(s) and s[j] == s[j + 1]: j += 1
seen.add(s[j])
j += 1
return result
function threeSum(nums: number[]): number[][] {
const sorted = [...nums].sort((a, b) => a - b);
const result: number[][] = [];
for (let i = 0; i < sorted.length - 2; i++) {
if (i > 0 && sorted[i] === sorted[i - 1]) continue;
const seen = new Set<number>();
for (let j = i + 1; j < sorted.length; j++) {
const need = -sorted[i] - sorted[j];
if (seen.has(need)) {
result.push([sorted[i], need, sorted[j]]);
while (j + 1 < sorted.length && sorted[j] === sorted[j + 1]) j++;
}
seen.add(sorted[j]);
}
}
return result;
}
vector<vector<int>> threeSum(vector<int>& nums) {
vector<int> sorted(nums); sort(sorted.begin(), sorted.end());
vector<vector<int>> result;
int n = sorted.size();
for (int i = 0; i < n - 2; i++) {
if (sorted[i] > 0) break;
if (i > 0 && sorted[i] == sorted[i - 1]) continue;
int left = i + 1;
int right = n - 1;
while (left < right) {
long long sum = (long long)sorted[i] + sorted[left] + sorted[right];
if (sum < 0) left++;
else if (sum > 0) right--;
else {
result.push_back({sorted[i], sorted[left], sorted[right]});
while (left < right && sorted[left] == sorted[left + 1]) left++;
while (left < right && sorted[right] == sorted[right - 1]) right--;
left++;
right--;
}
}
}
return result;
}
public List<List<Integer>> threeSum(int[] nums) {
int[] sorted = nums.clone(); Arrays.sort(sorted);
List<List<Integer>> result = new ArrayList<>();
int n = sorted.length;
for (int i = 0; i < n - 2; i++) {
if (sorted[i] > 0) break;
if (i > 0 && sorted[i] == sorted[i - 1]) continue;
int left = i + 1;
int right = n - 1;
while (left < right) {
long sum = (long) sorted[i] + sorted[left] + sorted[right];
if (sum < 0) left++;
else if (sum > 0) right--;
else {
result.add(List.of(sorted[i], sorted[left], sorted[right]));
while (left < right && sorted[left] == sorted[left + 1]) left++;
while (left < right && sorted[right] == sorted[right - 1]) right--;
left++;
right--;
}
}
}
return result;
}
def three_sum(nums: list[int]) -> list[list[int]]:
s = sorted(nums)
result: list[list[int]] = []
for i in range(len(s) - 2):
if s[i] > 0: break
if i > 0 and s[i] == s[i - 1]: continue
left = i + 1
right = len(s) - 1
while left < right:
total = s[i] + s[left] + s[right]
if total < 0: left += 1
elif total > 0: right -= 1
else:
result.append([s[i], s[left], s[right]])
while left < right and s[left] == s[left + 1]: left += 1
while left < right and s[right] == s[right - 1]: right -= 1
left += 1
right -= 1
return result
function threeSum(nums: number[]): number[][] {
const sorted = [...nums].sort((a, b) => a - b);
const result: number[][] = [];
for (let i = 0; i < sorted.length - 2; i++) {
if (sorted[i] > 0) break;
if (i > 0 && sorted[i] === sorted[i - 1]) continue;
let left = i + 1;
let right = sorted.length - 1;
while (left < right) {
const sum = sorted[i] + sorted[left] + sorted[right];
if (sum < 0) left++;
else if (sum > 0) right--;
else {
result.push([sorted[i], sorted[left], sorted[right]]);
while (left < right && sorted[left] === sorted[left + 1]) left++;
while (left < right && sorted[right] === sorted[right - 1]) right--;
left++;
right--;
}
}
}
return result;
}
vector<vector<int>> threeSum(const vector<int>& nums) {
int n = nums.size();
if (n < 3) return {};
vector<int> a(nums); sort(a.begin(), a.end());
vector<vector<int>> result;
for (int i = 0; i < n - 2; i++) {
if (a[i] > 0) break;
if ((long long)a[i] + a[n - 2] + a[n - 1] < 0) continue;
if (i > 0 && a[i] == a[i - 1]) continue;
int left = i + 1;
int right = n - 1;
while (left < right) {
long long sum = (long long)a[i] + a[left] + a[right];
if (sum < 0) left++;
else if (sum > 0) right--;
else {
result.push_back({a[i], a[left], a[right]});
do left++; while (left < right && a[left] == a[left - 1]);
do right--; while (left < right && a[right] == a[right + 1]);
}
}
}
return result;
}
public List<List<Integer>> threeSum(int[] nums) {
int n = nums.length;
if (n < 3) return new ArrayList<>();
int[] a = nums.clone(); Arrays.sort(a);
List<List<Integer>> result = new ArrayList<>();
for (int i = 0; i < n - 2; i++) {
if (a[i] > 0) break;
if ((long) a[i] + a[n - 2] + a[n - 1] < 0) continue;
if (i > 0 && a[i] == a[i - 1]) continue;
int left = i + 1;
int right = n - 1;
while (left < right) {
long sum = (long) a[i] + a[left] + a[right];
if (sum < 0) left++;
else if (sum > 0) right--;
else {
result.add(List.of(a[i], a[left], a[right]));
do left++; while (left < right && a[left] == a[left - 1]);
do right--; while (left < right && a[right] == a[right + 1]);
}
}
}
return result;
}
def three_sum(nums: Sequence[int]) -> list[list[int]]:
n = len(nums)
if n < 3: return []
a = sorted(nums)
result: list[list[int]] = []
for i in range(n - 2):
if a[i] > 0: break
if a[i] + a[n - 2] + a[n - 1] < 0: continue
if i > 0 and a[i] == a[i - 1]: continue
left = i + 1
right = n - 1
while left < right:
total = a[i] + a[left] + a[right]
if total < 0: left += 1
elif total > 0: right -= 1
else:
result.append([a[i], a[left], a[right]])
left += 1
while left < right and a[left] == a[left - 1]: left += 1
right -= 1
while left < right and a[right] == a[right + 1]: right -= 1
return result
function threeSum(nums: ArrayLike<number>): number[][] {
const n = nums.length;
if (n < 3) return [];
const a = Int32Array.from(nums).sort();
const result: number[][] = [];
for (let i = 0; i < n - 2; i++) {
if (a[i] > 0) break;
if (a[i] + a[n - 2] + a[n - 1] < 0) continue;
if (i > 0 && a[i] === a[i - 1]) continue;
let left = i + 1;
let right = n - 1;
while (left < right) {
const sum = a[i] + a[left] + a[right];
if (sum < 0) left++;
else if (sum > 0) right--;
else {
result.push([a[i], a[left], a[right]]);
do left++; while (left < right && a[left] === a[left - 1]);
do right--; while (left < right && a[right] === a[right + 1]);
}
}
}
return result;
}