Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 39 additions & 2 deletions lib/possible_bipartition.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,41 @@
# I tried my best! All the test pass except for number 4. I know that the problem
# is that I should be moving through the dislikes as they appear instead of just
# linearly. However, for whatever when I tried using a stack and popping off the
# values, it didnt alter my stack--meaning the stack grew in length and I was
# trapped in a loop.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, you are going to need a stack or queue to traverse the graph so that you can keep consistent that you going toggling between the two "colors" or groups while on a path.

Your code here isn't traversing a graph, but instead iterating through the list of nodes. Take a look at either my breadth-first-search or depth-first-search solutions.


def possible_bipartition(dislikes)
raise NotImplementedError, "possible_bipartition isn't implemented yet"
end
outer_length = dislikes.length
return true if outer_length <= 2

groupA = {}
groupB = {}

outer_length.times do |x|
if dislikes[x].length == 0
next
end

other = 'B'
if groupA[x] || groupB[x]
other = groupA[x] ? 'B' : 'A'
elsif !groupA[x] && !groupB[x]
groupA[x] = 1
else
groupB[x] = 1
other = 'A'
end

dislikes[x].each do |i|
if other == 'B'
return false if groupA[i]
groupB[i] = 1
elsif other == 'A'
return false if groupB[i]
groupA[i] = 1
end
end
end

return true
end