diff --git a/algorithms/CPlusPlus/Arrays/three-sum.cpp b/algorithms/CPlusPlus/Arrays/three-sum.cpp new file mode 100644 index 00000000..1d0c4086 --- /dev/null +++ b/algorithms/CPlusPlus/Arrays/three-sum.cpp @@ -0,0 +1,102 @@ +//Description :c++ solution to find all the unique triplet without using any extra space. +//using this method we will be able to find all the unique triplets +//Time Complexity : O(n), where n is the array size +//Space Complexity : O(1),it will take only constant amount of time. +//sample +// input 1: arr[]=[-1,0,1,2,-1,4] +//output 1:[[-1,0,1][-1,-1,2]] +//input 2:arr[]=[] +//output 2:[] + +#include +using namespace std; + + void findTriplet(int arr[],int n,int sum) { + + int i; + + // Sort the input array + sort(arr, arr + n); + + // For handling the cases when no such + // triplets exits. + bool flag = false; + + // Iterate over the array from start to n-2. + for (i = 0; i < n - 2; i++) + { + if (i == 0 || arr[i] > arr[i - 1]) + { + // Index of the first element in + // remaining range. + int start = i + 1; + + // Index of the last element + int end = n - 1; + + // Setting our new target + int target = sum - arr[i]; + + while (start < end) + { + // Checking if current element + // is same as previous + if (start > i + 1 + && arr[start] == arr[start - 1]) + { + start++; + continue; + } + + // Checking if current element is + // same as previous + if (end < n - 1 + && arr[end] == arr[end + 1]) + { + end--; + continue; + } + + // If we found the triplets then print it + // and set the flag + if (target == arr[start] + arr[end]) + { + cout << "[" << arr[i] + << "," << arr[start] + << "," << arr[end] << "] "; + flag = true; + start++; + end--; + } + // If target is greater then + // increment the start index + else if (target > (arr[start] + arr[end])) + { + start++; + } + // If target is smaller than + // decrement the end index + else { + end--; + } + } + } + } + + // If no such triplets found + if (flag == false) { + cout << "No Such Triplets Exist" + << "\n"; + } + +} +int main() +{ +// int arr[]={12,3,6,1,6,9}; +int arr[]={-1,0,1,2,-1,-4}; + int n=sizeof(arr)/sizeof(arr[0]); + int sum=0; + findTriplet(arr,n,sum); + return 0; + +} diff --git a/algorithms/CPlusPlus/README.md b/algorithms/CPlusPlus/README.md index f190db26..d82af5ed 100644 --- a/algorithms/CPlusPlus/README.md +++ b/algorithms/CPlusPlus/README.md @@ -25,7 +25,7 @@ - [Index of Smallest element of Array](Arrays/index-of-smallest-element-of-array.cpp) - [Move Zeros to End of The Array](Arrays/move-zeros-to-end-of-array.cpp) - [Kadane's Algorithm](Arrays/Kadane's-Algorithm.cpp) - +- [All unique triplet that sum up to given value](Arrays/three-sum.cpp) ## Dynamic-Programming