Absolute difference of all pairwise consecutive elements in a Set
Given a set of integers of N elements. The task is to print the absolute difference of all of the pairwise consecutive elements in a set. Pairwise consecutive pairs of a set of size N are accessed using iterator.
Example:
Input: s = {8, 5, 4, 3, 15, 20}
Output: 1 1 3 7 5
Explanation:
The set is : 3 4 5 8 15 20
The difference between 4 and 3 is 1
The difference between 5 and 4 is 1
The difference between 8 and 5 is 3
The difference between 15 and 8 is 7
The difference between 20 and 15 is 5
Input: s = {5, 10, 15, 20}
Output: 5 5 5
Explanation:
The set is : 5 10 15 20
The difference between 10 and 5 is 5
The difference between 15 and 10 is 5
The difference between 20 and 15 is 5
The article Absolute Difference of all pairwise consecutive elements in an array covers the approach to find the absolute difference of all pairwise consecutive elements in an array.
Approach: This problem can be solved using two pointer algorithm. We will be using iterators as the two pointers to iterate the set and check for a given condition. Follow the steps below to understand the solution to the above problem:
- Declare two iterators itr1 and itr2 and both of them point to the beginning element of the set.
- Increment itr2 i.e. itr2++ at the beginning of the loop.
- Subtract values pointed by itr1 and itr2 i.e. *itr2 – *itr1.
- Increment itr1 at the end of the loop, this means *itr1++.
- If itr2 reaches the end of the set, then break the loop and exit.
In C++, the set elements are sorted and duplicates are removed before storing in the memory. Therefore, in the below C++ program the difference between the pairwise consecutive elements is computed on the sorted set as explained in the above examples.
Below is the C++ program implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void display_difference(set< int > s)
{
set< int >::iterator itr;
set< int >::iterator itr1 = s.begin();
set< int >::iterator itr2 = s.begin();
while (1) {
itr2++;
if (itr2 == s.end())
break ;
cout << (*itr2 - *itr1) << " " ;
itr1++;
}
}
int main()
{
set< int > s{ 8, 5, 4, 3, 15, 20 };
display_difference(s);
return 0;
}
|
Java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.TreeSet;
class GFG {
static void display_difference(HashSet<Integer> S) {
TreeSet<Integer> s = new TreeSet<Integer>(S);
int itr1 = 0 ;
int itr2 = 0 ;
while ( true ) {
itr2 += 1 ;
;
if (itr2 >= s.size()) {
break ;
}
List<Integer> temp = new ArrayList<Integer>();
temp.addAll(s);
System.out.print((temp.get(itr2) - temp.get(itr1)) + " " );
itr1 += 1 ;
}
}
public static void main(String args[])
{
HashSet<Integer> s = new HashSet<Integer>();
s.add( 8 );
s.add( 5 );
s.add( 4 );
s.add( 3 );
s.add( 15 );
s.add( 20 );
display_difference(s);
}
}
|
Python3
def display_difference(s):
itr1 = 0
itr2 = 0
while ( 1 ):
itr2 + = 1
if (itr2 > = len (s)):
break
print (( list (s)[itr2] - list (s)[itr1]), end = " " )
itr1 + = 1
if __name__ = = "__main__" :
s = set ([ 8 , 5 , 4 , 3 , 15 , 20 ])
display_difference(s)
|
C#
using System;
using System.Collections.Generic;
public class GFG
{
static void display_difference(HashSet< int > S)
{
SortedSet< int > s = new SortedSet< int >(S);
int itr1 = 0;
int itr2 = 0;
while ( true ) {
itr2 += 1;
;
if (itr2 >= s.Count) {
break ;
}
List< int > temp = new List< int >();
temp.AddRange(s);
Console.Write((temp[itr2] - temp[itr1]) + " " );
itr1 += 1;
}
}
public static void Main(String []args)
{
HashSet< int > s = new HashSet< int >();
s.Add(8);
s.Add(5);
s.Add(4);
s.Add(3);
s.Add(15);
s.Add(20);
display_difference(s);
}
}
|
Javascript
<script>
function display_difference(s) {
s = new Set([...s].sort((a, b) => a - b));
let itr1 = 0
let itr2 = 0
while (1) {
itr2 += 1
if (itr2 >= s.size) {
break
}
document.write(([...s][itr2] - [...s][itr1]) + " " )
itr1 += 1
}
}
let s = new Set([8, 5, 4, 3, 15, 20]);
display_difference(s)
</script>
|
Output:
1 1 3 7 5
Time Complexity: O(n)
Auxiliary Space: O(n)
Last Updated :
28 Dec, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...