Given a Matrix, sort by occurrences where next element is greater than current. Compute the count of i < i + 1 in each list, sort each row by count of each of this condition in each row.
Input : test_list = [[4, 6, 2, 9, 10], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]]
Output : [[6, 3, 2], [5, 3, 2, 5], [4, 6, 2, 9, 10], [2, 4, 5, 6, 7, 7]]
Explanation : for [4, 6, 2, 9, 10], the count is 3 as 6>=4, 9>=2 and 10>=9, similarly for [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2] counts are 1,4 and 0 respectively. As, 0<1<3<4 so the order of rows is [6, 3, 2], [5, 3, 2, 5], [4, 6, 2, 9, 10], [2, 4, 5, 6, 7, 7]
Input : test_list = [[5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]]
Output : [[6, 3, 2], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7]]
Explanation : 0 < 1 < 4, is the greater next greater elements count. No next element is greater in 1st list.
Method #1 : Using sort() + len()
In this, we perform task of sorting using sort() and call external function as the key to solve problem of counting elements with next element greater. The size is computed using len().
Python3
def get_greater_freq(row):
return len ([row[idx] for idx in range ( 0 , len (row) - 1 ) if row[idx] < row[idx + 1 ]])
test_list = [[ 4 , 6 , 2 , 9 , 10 ], [ 5 , 3 , 2 , 5 ], [ 2 , 4 , 5 , 6 , 7 , 7 ], [ 6 , 3 , 2 ]]
print ( "The original list is : " + str (test_list))
test_list.sort(key = get_greater_freq)
print ( "Sorted rows : " + str (test_list))
|
Output:
The original list is : [[4, 6, 2, 9, 10], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]]
Sorted rows : [[6, 3, 2], [5, 3, 2, 5], [4, 6, 2, 9, 10], [2, 4, 5, 6, 7, 7]]
Time Complexity: O(nlogn+mlogm)
Auxiliary Space: O(1)
Method #2 : Using sorted() + len() + lambda
In this, we perform task of sorting using sorted(), lambda and len() are used for creating one-liner functionality to perform sorting o the basis of number of elements greater than their previous element.
Python3
test_list = [[ 4 , 6 , 2 , 9 , 10 ], [ 5 , 3 , 2 , 5 ], [ 2 , 4 , 5 , 6 , 7 , 7 ], [ 6 , 3 , 2 ]]
print ( "The original list is : " + str (test_list))
res = sorted (test_list, key = lambda row: len (
[row[idx] for idx in range ( 0 , len (row) - 1 ) if row[idx] < row[idx + 1 ]]))
print ( "Sorted rows : " + str (res))
|
Output:
The original list is : [[4, 6, 2, 9, 10], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]]
Sorted rows : [[6, 3, 2], [5, 3, 2, 5], [4, 6, 2, 9, 10], [2, 4, 5, 6, 7, 7]]
Time Complexity: O(n*logn), where n is the length of the input list. This is because we’re using the built-in sorted() function which has a time complexity of O(nlogn) in the worst case.
Auxiliary Space: O(n), as we’re using additional space other than the input list itself.
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!
Last Updated :
08 Mar, 2023
Like Article
Save Article