Skip to content

Commit 5533956

Browse files
authored
Find unique triplets in an array div-bargali#806
Find unique triplets in an array div-bargali#806
2 parents eb83b47 + de99371 commit 5533956

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
Given an array nums of n integers, find all unique triplets in the array which gives the sum of zero.
3+
*/
4+
#include<bits/stdc++.h>
5+
using namespace std;
6+
vector<vector<int>> threeSum(vector<int>& nums) {
7+
int n = nums.size();
8+
if(n < 3)
9+
return {};
10+
sort(nums.begin(),nums.end());
11+
vector <vector<int>> result;
12+
unordered_set<string> triplets;
13+
int i = 0;
14+
while(i < n -2){
15+
int j = i+1, k = n-1;
16+
while(j<k){
17+
int sum = nums[i] + nums[j] + nums[k];
18+
if(sum == 0){
19+
string newTriplet = to_string(nums[i]) + ":"
20+
+ to_string(nums[j]) + ":"
21+
+ to_string(nums[k]);
22+
if(triplets.find(newTriplet) == triplets.end()){
23+
triplets.insert(newTriplet);
24+
result.push_back({nums[i],nums[j],nums[k]});
25+
}
26+
j++;
27+
k--;
28+
}
29+
else if(sum > 0)
30+
k--;
31+
else if(sum < 0)
32+
j++;
33+
}
34+
i++;
35+
}
36+
return result;
37+
}
38+
39+
int main(){
40+
int n;
41+
vector <int> nums;
42+
cin>>n;
43+
for(int i = 0; i < n; i++){
44+
int input;
45+
cin>>input;
46+
nums.push_back(input);
47+
}
48+
vector <vector<int>> result = threeSum(nums);
49+
for(int i = 0; i< result.size(); i++){
50+
for(int j = 0; j< result[0].size(); j++)
51+
cout<<result[i][j]<<" ";
52+
cout<<"\n";
53+
}
54+
}
55+
//Time complexity: O(n^2), Space complexity: O(n)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import java.util.*;
2+
import java.lang.*;
3+
class DijkstraAlgo{
4+
static final int V=9;
5+
static int minDistance(int dist[], Boolean sptset[]){
6+
int min=Integer.MAX_VALUE, min_index=-1;
7+
for(int v=0;v<V;v++){
8+
if(sptset[v]==false && dist[v]<=min){
9+
min=dist[v];
10+
min_index=v;
11+
}
12+
}
13+
return min_index;
14+
}
15+
static void printSolution(int dist[]){
16+
System.out.println("Vertex \t\t Distance from Source");
17+
for(int v=0;v<V;v++)
18+
System.out.println(v+"\t\t"+dist[v]);
19+
}
20+
static void dijkstra(int graph[][], int src){
21+
int dist[]=new int[V];
22+
Boolean sptset[]=new Boolean[V];
23+
24+
dist[src]=0;
25+
sptset[src]=false;
26+
for(int v=1;v<V;v++){
27+
dist[v]=Integer.MAX_VALUE;
28+
sptset[v]=false;
29+
}
30+
for(int count=0;count<V-1;count++){
31+
int u=minDistance(dist,sptset);
32+
sptset[u]=true;
33+
for(int v=0;v<V;v++){
34+
if(sptset[v]==false && graph[u][v]!=0 && dist[u]!= Integer.MAX_VALUE &&
35+
(dist[u]+ graph[u][v]) < dist[v]
36+
)
37+
dist[v]=dist[u]+graph[u][v];
38+
}
39+
}
40+
printSolution(dist);
41+
}
42+
public static void main(String[] args) {
43+
int graph[][]=new int[][]{
44+
{ 0, 4, 0, 0, 0, 0, 0, 8, 0 },
45+
{ 4, 0, 8, 0, 0, 0, 0, 11, 0 },
46+
{ 0, 8, 0, 7, 0, 4, 0, 0, 2 },
47+
{ 0, 0, 7, 0, 9, 14, 0, 0, 0 },
48+
{ 0, 0, 0, 9, 0, 10, 0, 0, 0 },
49+
{ 0, 0, 4, 14, 10, 0, 2, 0, 0 },
50+
{ 0, 0, 0, 0, 0, 2, 0, 1, 6 },
51+
{ 8, 11, 0, 0, 0, 0, 1, 0, 7 },
52+
{ 0, 0, 2, 0, 0, 0, 6, 7, 0 } };
53+
dijkstra(graph, 0);
54+
55+
}
56+
}

0 commit comments

Comments
 (0)