Medium
Points: 4
Given an array arr[], find all possible triplets i, j, k in the arr[] whose sum of elements is equals to zero.
Returned triplet should also be internally sorted i.e. i<j<k.
Input: arr[] = [0, -1, 2, -3, 1] Output: [[0, 1, 4], [2, 3, 4]] Explanation:Triplets with sum 0 are: arr[0] + arr[1] + arr[4] = 0 + (-1) + 1 = 0 arr[2] + arr[3] + arr[4] = 2 + (-3) + 1 = 0
Input: arr[] = [1, -2, 1, 0, 5] Output: [[0, 1, 2]] Explanation: Only triplet which satisfies the condition is arr[0] + arr[1] + arr[2] = 1 + (-2) + 1 = 0
Input: arr[] = [2, 3, 1, 0, 5] Output: [[]] Explanation: There is no triplet with sum 0.
O(n^2)
O(n^2)
3 <= arr.size() <= 10^3
-10^4 <= arr[i] <= 10^4
//Time Complexity : O(n^3)
//Space Complexity : O(n^3)
class Solution {
public:
vector<vector<int>> findTriplets(vector<int> &arr) {
// Code here
int len = arr.size();
std::vector<std::vector<int>> res;
for (int i = 0; i < len - 2; i++) {
for (int j = i + 1; j < len - 1; j++) {
for (int k = j + 1; k < len; k++) {
if (arr[i] + arr[j] + arr[k] == 0) {
res.push_back({i, j, k});
}
}
}
}
return res;
}
};//Time Complexity : O(n^3)
//Space Complexity : O(n^3)
class Solution {
public List<List<Integer>> findTriplets(int[] arr) {
// Your code here
int len=arr.length;
List<List<Integer>> res = new ArrayList<>();
for (int i = 0; i < len - 2; i++)
for (int j = i + 1; j < len - 1; j++)
for (int k = j + 1; k < len; k++)
if (arr[i] + arr[j] + arr[k] == 0) res.add(Arrays.asList(i, j, k));
return res;
}
}#Space Complexity: O(n²)
#Time Complexity: O(n²)
class Solution:
def findTriplets(self, arr):
n, result, pair_sum_map = len(arr), set(), {}
for i in range(n):
for j in range(i + 1, n):
pair_sum_map.setdefault(arr[i] + arr[j], []).append((i, j))
for i in range(n):
for pair in pair_sum_map.get(-arr[i], []):
if i not in pair:
result.add(tuple(sorted([i, *pair])))
return [list(triplet) for triplet in sorted(result)]//Time Complexity : O(n^3)
//Space Complexity : O(n^3)
class Solution {
findTriplets(arr) {
const res = [];
const len = arr.length;
for (let i = 0; i < len - 2; i++) {
for (let j = i + 1; j < len - 1; j++) {
for (let k = j + 1; k < len; k++) {
if (arr[i] + arr[j] + arr[k] === 0) {
res.push([i, j, k]);
}
}
}
}
return res;
}
}