Python is one of the most powerful programming languages. It gives us various unique features and functionalities that make it easy for us to write code.
In this article we'll solve Leetcode array problems in one line using one of Python's most interesting features – List Comprehension.
What is List Comprehension?
Before going into the problems, let's make sure we understand what list comprehension is all about.
A list comprehension is a syntactic construct available in some programming languages for creating a list based on existing lists
- Wikipedia
Let's see how list comprehension works with an example.
Consider an array of numbers. Our task is to add 1 to the numbers at odd indices and to add 2 to the number at even indices.
Now we'll see how to solve the above problem using both a for-loop and list comprehension.
How to solve the problem with a for-loop
def addOneAndTwo(nums, n):
for i in range(n):
if i % 2 == 1:
nums[i] += 1
else:
nums[i] += 2
return nums
How to solve it with list comprehension
def addOneAndTwo(nums, n):
return [nums[i] + 1 if i % 2 == 1 else nums[i] + 2 for i in range(n)]
You can see how the solution using list comprehension is simplified from 6 lines to 1 line. This is the power of list comprehension.
How to Solve Leetcode Problems with List Comprehension
Now let us solve the below Leetcode problems in 1 line using list comprehension.
1. Shuffle The Array
Here's the problem from Leetcode:
Given the array nums
consisting of 2n
elements in the form [x1,x2,...,xn,y1,y2,...,yn]
. Return the array in the form [x1,y1,x2,y2,...,xn,yn]
.
Example
Input: nums = [2,5,1,3,4,7], n = 3
Output: [2,3,5,4,1,7]
Explanation: Since x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 then the answer is [2,3,5,4,1,7].
Solution
def shuffle(self, nums, n):
return reduce(lambda a, b: a + b, [[nums[i], nums[j]] for i, j in zip(range(0, n), range(n, 2 * n))])
2. Number of Good Pairs
Given an array of integers nums
. A pair (i,j)
is called good if nums[i]
== nums[j]
and i
< j
.Return the number of good pairs.
Example
Input: nums = [1,2,3,1,1,3]
Output: 4
Explanation: There are 4 good pairs (0,3), (0,4), (3,4), (2,5) 0-indexed.
Solution
def numIdenticalPairs(self, nums):
return sum([int(i != j and nums[i] == nums[j]) for i in range(0, len(nums)) for j in range(i + 1, len(nums))])
3. Kids With the Greatest Number of Candies
Given the array candies
and the integer extraCandies
, where candies[i]
represents the number of candies that the ith kid has.
For each kid check if there is a way to distribute extraCandies
among the kids such that they can have the greatest number of candies among them. Notice that multiple kids can have the greatest number of candies.
Example
Input: candies = [2,3,5,1,3], extraCandies = 3
Output: [true,true,true,false,true]
Explanation: Kid 1 has 2 candies, and if they receive all extra candies (3) they will have 5 candies – the greatest number of candies among the kids.
Kid 2 has 3 candies, and if they receive at least 2 extra candies then they will have the greatest number of candies among the kids.
Kid 3 has 5 candies, and this is already the greatest number of candies among the kids.
Kid 4 has 1 candy, and even if they receive all extra candies they will only have 4 candies.
Kid 5 has 3 candies, and if they receive at least 2 extra candies then they will have the greatest number of candies among the kids.
Solution
def kidsWithCandies(self, candies, extraCandies):
return [candy + extraCandies >= max(candies) for candy in candies]
4. Decompress Run-Length Encoded List
We are given a list nums
of integers representing a list compressed with run-length encoding.
Consider each adjacent pair of elements [freq, val] = [nums[2*i], nums[2*i+1]]
(with i >= 0
). For each such pair, there are freq
elements with value val
concatenated in a sublist. Concatenate all the sublists from left to right to generate the decompressed list.
Return the decompressed list.
Example
Input: nums = [1,2,3,4]
Output: [2,4,4,4]
Explanation: The first pair [1,2] means we have freq = 1 and val = 2 so we generate the array [2].
The second pair [3,4] means we have freq = 3 and val = 4 so we generate [4,4,4]. At the end the concatenation [2] + [4,4,4] is [2,4,4,4].
Solution
def decompressRLElist(self, nums):
return reduce(lambda a, b: a + b, [[nums[i + 1]] * nums[i] for i in range(0, len(nums), 2)])
5. Richest Customer's Wealth
You are given an m x n
integer grid accounts
where accounts[i][j]
is the amount of money the ith
customer has in the jth
bank. Return the wealth that the richest customer has.
A customer's wealth is the amount of money they have in all their bank accounts. The richest customer is the customer that has the maximum wealth.
Example
Input: accounts = [[1,2,3],[3,2,1]]
Output: 6
Explanation: 1st customer has wealth = 1 + 2 + 3 = 6 2nd customer has wealth = 3 + 2 + 1 = 6
Both customers are considered the richest with a wealth of 6 each, so return 6.
Solution
def maximumWealth(self, accounts):
return max([sum(row) for row in accounts])
Conclusion
I hope the above solutions were useful. You can combine list comprehension with other functions like map, filter and reduce to make the solutions more simple and effective.