Java Program to Print all triplets in sorted array that form AP
Last Updated :
19 Jan, 2022
Given a sorted array of distinct positive integers, print all triplets that form AP (or Arithmetic Progression)
Examples :
Input : arr[] = { 2, 6, 9, 12, 17, 22, 31, 32, 35, 42 };
Output :
6 9 12
2 12 22
12 17 22
2 17 32
12 22 32
9 22 35
2 22 42
22 32 42
Input : arr[] = { 3, 5, 6, 7, 8, 10, 12};
Output :
3 5 7
5 6 7
6 7 8
6 8 10
8 10 12
A simple solution is to run three nested loops to generate all triplets and for every triplet, check if it forms AP or not. Time complexity of this solution is O(n3)
A better solution is to use hashing. We traverse array from left to right. We consider every element as middle and all elements after it as next element. To search the previous element, we use a hash table.
Java
// Java program to print all
// triplets in given array
// that form Arithmetic
// Progression
import java.io.*;
import java.util.*;
class GFG
{
// Function to print
// all triplets in
// given sorted array
// that forms AP
static void printAllAPTriplets(int []arr,
int n)
{
ArrayList<Integer> s =
new ArrayList<Integer>();
for (int i = 0;
i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
// Use hash to find if
// there is a previous
// element with difference
// equal to arr[j] - arr[i]
int diff = arr[j] - arr[i];
boolean exists =
s.contains(arr[i] - diff);
if (exists)
System.out.println(arr[i] - diff +
" " + arr[i] +
" " + arr[j]);
}
s.add(arr[i]);
}
}
// Driver code
public static void main(String args[])
{
int []arr = {2, 6, 9, 12, 17,
22, 31, 32, 35, 42};
int n = arr.length;
printAllAPTriplets(arr, n);
}
}
// This code is contributed by
// Manish Shaw(manishshaw1)
Output :
6 9 12
2 12 22
12 17 22
2 17 32
12 22 32
9 22 35
2 22 42
22 32 42
Time Complexity : O(n2)
Auxiliary Space : O(n)
An efficient solution is based on the fact that the array is sorted. We use the same concept as discussed in GP triplet question. The idea is to start from the second element and fix every element as a middle element and search for the other two elements in a triplet (one smaller and one greater).
Below is the implementation of the above idea.
Java
// Java implementation to print
// all the triplets in given array
// that form Arithmetic Progression
import java.io.*;
class GFG
{
// Function to print all triplets in
// given sorted array that forms AP
static void findAllTriplets(int arr[], int n)
{
for (int i = 1; i < n - 1; i++)
{
// Search other two elements
// of AP with arr[i] as middle.
for (int j = i - 1, k = i + 1; j >= 0 && k < n;)
{
// if a triplet is found
if (arr[j] + arr[k] == 2 * arr[i])
{
System.out.println(arr[j] +" " +
arr[i]+ " " + arr[k]);
// Since elements are distinct,
// arr[k] and arr[j] cannot form
// any more triplets with arr[i]
k++;
j--;
}
// If middle element is more move to
// higher side, else move lower side.
else if (arr[j] + arr[k] < 2 * arr[i])
k++;
else
j--;
}
}
}
// Driver code
public static void main (String[] args)
{
int arr[] = { 2, 6, 9, 12, 17,
22, 31, 32, 35, 42 };
int n = arr.length;
findAllTriplets(arr, n);
}
}
// This code is contributed by vt_m.
Output :
6 9 12
2 12 22
12 17 22
2 17 32
12 22 32
9 22 35
2 22 42
22 32 42
Time Complexity : O(n2)
Auxiliary Space : O(1)
Please refer complete article on Print all triplets in sorted array that form AP for more details!
Similar Reads
Java Program to Print the Multiplication Table in a Triangle Form In this form, a table is displayed row and column-wise, in such a way such that in every row, only the entries up to the same column number filled. Example: Input : rows = 6 Output: 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 Approach: The idea is to use nested loops. First, display the col
2 min read
Java Program to Print the kth Element in the Array We need to print the element at the kth position in the given array. So we start the program by taking input from the user about the size of an array and then all the elements of that array. Now by entering the position k at which you want to print the element from the array, the program will print
2 min read
Java Program to Find a triplet that sum to a given value Given an array and a value, find if there is a triplet in array whose sum is equal to the given value. If there is such a triplet present in array, then print the triplet and return true. Else return false. Examples:Â Â Input: array = {12, 3, 4, 1, 6, 9}, sum = 24;Â Output: 12, 3, 9Â Explanation: There
7 min read
Java Program to Find all triplets with zero sum Given an array of distinct elements. The task is to find triplets in the array whose sum is zero. Examples :Â Input : arr[] = {0, -1, 2, -3, 1} Output : (0 -1 1), (2 -3 1) Explanation : The triplets with zero sum are 0 + -1 + 1 = 0 and 2 + -3 + 1 = 0 Input : arr[] = {1, -2, 1, 0, 5} Output : 1 -2 1
6 min read
Java Program to Sort the Elements of an Array in Ascending Order Here, we will sort the array in ascending order to arrange elements from smallest to largest, i.e., ascending order. So the easy solution is that we can use the Array.sort method. We can also sort the array using Bubble sort.1. Using Arrays.sort() MethodIn this example, we will use the Arrays.sort()
2 min read