Possible Bipartition: Day 27 of the May LeetCoding Challenge
“Without requirements or design, programming is the art of adding bugs to an empty text file.”
~ Louis Srygley
Day 27 of the May LeetCoding Challenge by Leetcode
Problem definition: Possible Bipartition
Given a set of N
people (numbered 1, 2, ..., N
), we would like to split everyone into two groups of any size.
Each person may dislike some other people, and they should not go into the same group.
Formally, if dislikes[i] = [a, b]
, it means it is not allowed to put the people numbered a
and b
into the same group.
Return true
if and only if it is possible to split everyone into two groups in this way.
Sample Testcase
Testcase 1
Input: N = 4, dislikes = [[1,2],[1,3],[2,4]]
Output: true
Explanation: group1 [1,4], group2 [2,3]
Testcase 2
Input: N = 3, dislikes = [[1,2],[1,3],[2,3]]
Output: false
Testcase 3
Input: N = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]
Output: false
Note:
- 1 <= N <= 2000
- 0 <= dislikes.length <= 10000
- 1 <= dislikes[i][j] <= N
- dislikes[i][0] < dislikes[i][1]
- There does not exist i != j for which dislikes[i] == dislikes[j].
I highly encourage you to attempt this problem on your own before looking at my solution.
Solution
class Solution(object):
def possibleBipartition(self, N, dislikes):
"""
:type N: int
:type dislikes: List[List[int]]
:rtype: bool
"""
if(N<=2):
return True
if(len(dislikes)<=1):
return True
while(dislikes):
remaining = []
group1 = set()
group2 = set()
group1.add(dislikes[0][0])
group2.add(dislikes[0][1])
for i in range(1, len(dislikes)):
a, b = dislikes[i][0], dislikes[i][1]
if a in group1 and b in group1:
return False
elif a in group2 and b in group2:
return False
elif a in group1 and b in group2:
continue
elif a in group2 and b in group1:
continue
elif a in group1:
group2.add(b)
elif b in group1:
group2.add(a)
elif a in group2:
group1.add(b)
elif b in group2:
group1.add(a)
else:
remaining.append(dislikes[i])
dislikes = remaining
return True
Submission Details
Total test cases passed: 66 / 66
Runtime: 1060 ms
Memory Usage: 18.1 MB
Note: This submission was better than 13.23% of Python3 solutions in terms of runtime! Try to come up with a better approach! 🌚
I would really recommend you to explore this side of the Computer Science and tune in to the journey of competitive programming to write better, cleaner, efficient and optimal code! 😀
If you have a better approach to this problem, or for any other queries feel free to reach out to me! 😇