Given a Matrix, extract the rows with a minimum difference in extreme values.
Examples:
Input : test_list = [[4, 10, 18], [5, 0], [1, 4, 6], [19, 2]]
Output : [[1, 4, 6], [5, 0]]
Explanation : 6 – 1 = 5, 5 – 0 = 5, is minimum difference between extreme values.Input : test_list = [[4, 10, 18], [5, 0], [2, 4, 6], [19, 2]]
Output : [[2, 4, 6]]
Explanation : 6 – 2 = 4, is min diff.
Method #1 : Using list comprehension + min()
In this, we compute minimum difference between extreme values, and then use list comprehension to get particular row with that value difference between extreme values.
Python3
# Python3 code to demonstrate working of # Matrix Minimum difference in extreme values row # Using min() + list comprehension # initializing list test_list = [[ 4 , 10 , 18 ], [ 5 , 3 , 10 ], [ 1 , 4 , 6 ], [ 19 , 2 ]] # printing original list print ( "The original list is : " + str (test_list)) # getting min value min_val = min ([ max (sub) - min (sub) for sub in test_list]) # using list comprehension to filter res = [sub for sub in test_list if max (sub) - min (sub) = = min_val] # printing result print ( "Rows with Minimum difference in extreme values : " + str (res)) |
Output:
The original list is : [[4, 10, 18], [5, 3, 10], [1, 4, 6], [19, 2]] Rows with Minimum difference in extreme values : [[1, 4, 6]]
Time Complexity: O(n) where n is the number of elements in the list “test_list”. list comprehension + min() performs n number of operations.
Auxiliary Space: O(n), extra space of size n is required
Method #2 : Using min() + list comprehension + filter() + lambda
In this, we perform task of filtering comparing with minimum value using filter() + lambda.
Python3
# Python3 code to demonstrate working of # Matrix Minimum difference in extreme values row # Using min() + list comprehension + filter() + lambda # initializing list test_list = [[ 4 , 10 , 18 ], [ 5 , 3 , 10 ], [ 1 , 4 , 6 ], [ 19 , 2 ]] # printing original list print ( "The original list is : " + str (test_list)) # getting min value min_val = min ([ max (sub) - min (sub) for sub in test_list]) # using filter() + lambda to filter res = list ( filter ( lambda sub : max (sub) - min (sub) = = min_val, test_list)) # printing result print ( "Rows with Minimum difference in extreme values : " + str (res)) |
Output:
The original list is : [[4, 10, 18], [5, 3, 10], [1, 4, 6], [19, 2]] Rows with Minimum difference in extreme values : [[1, 4, 6]]
Method #3: Using loops
Step-by-step approach:
- Initialize a variable ‘min_diff’ to a very large value.
- Initialize an empty list ‘rows’.
- Loop through each row ‘sub’ in ‘test_list’.
- Calculate the difference between the maximum and minimum value in ‘sub’.
- If the difference is less than ‘min_diff’, update ‘min_diff’ to this value.
- Clear the ‘rows’ list.
Python3
# initializing list test_list = [[ 4 , 10 , 18 ], [ 5 , 3 , 10 ], [ 1 , 4 , 6 ], [ 19 , 2 ]] # printing original list print ( "The original list is : " + str (test_list)) # using loops to find the rows with minimum difference in extreme values min_diff = float ( 'inf' ) rows = [] for sub in test_list: diff = max (sub) - min (sub) if diff < min_diff: min_diff = diff rows.clear() if diff = = min_diff: rows.append(sub) # printing result print ( "Rows with Minimum difference in extreme values : " + str (rows)) |
The original list is : [[4, 10, 18], [5, 3, 10], [1, 4, 6], [19, 2]] Rows with Minimum difference in extreme values : [[1, 4, 6]]
Time complexity: O(nm), where n is the number of rows and m is the length of the longest row.
Auxiliary space: O(k), where k is the number of rows with the minimum difference in extreme values.