Amazon Interview Question
SDE-3sCountry: India
Interview Type: In-Person
Most important thing is data's organization. Because card objects are billions. But I assumed CardManager class already made this system.
bool isBloodRelated(std::string& id1, std::string& id2) {
if (id1 == id2) {
return true;
}
JsonObject id1Card;
if (!CardManager::getCard(id1, id1Card)) {
throw invalid_argument("Invalid PersonalId: " + id1);
}
JsonObject id2Card;
if (!CardManager::getCard(id1, id2Card)) {
throw invalid_argument("Invalid PersonalId: " + id2);
}
std::set<std::string> blooadRelatedKeys = CardManager::getBloodRelatedKeys();
if (isMember(id1Card, blooadRelatedKeys)) {
return true;
}
if (isMember(id2Card, blooadRelatedKeys)) {
return true;
}
return false;
}
bool isMember(JsonObject& card, std::set<std::string>& checkingKeys) {
bool isMember = false;
std::set<std::string>::iterator iter;
for (iter = checkingKeys.begin(); iter != checkingKeys.end(); ++iter) {
std::string& familyId = card.get(*iter);
if (familyId == id) {
isMember = true;
break;
}
}
return isMember;
}
Assuming cards is a collection of all the objects
void isBloodRelated(String id1, String id2){
Map<String, Card> cardId2Obj = cards.parallelStream().collect( Collectors.toMap( card-> card.myId, card-> card ));
Card card1 = cardId2Obj.get( id1 );
Card card2 = cardId2Obj.get( id2 );
boolean relation = false;
if(card1.myId.equals( card2.myId )){
relation = true;
}else if(card1.momId.equals( card2.myId ) || card1.myId.equals( card2.momId )){
relation = true;
}else if(card1.dadId.equals( card2.myId ) || card1.myId.equals( card2.dadId )){
relation = true;
}else if(card1.dadId.equals( card2.dadId ) || card1.momId.equals( card2.momId )){
relation = true;
}
else{
relation = false;
}
}
Basic check
public boolean checkBloodRelation(Person p1, Person p2)
{
if(p1 == null || p2 == null)
return false
if(this.isBloodRelated(p1,p2)) return true;
return(checkBloodRelation(p1.momid, p2.momid)||checkBloodRelation(p1.momid, p2.dadid)||checkBloodRelation(p1.dadid, p2.momid)||checkBloodRelation(p1.dadid, p2.dadid));
}
public boolean isBloodRelated(Person p1, Person p2)
{
if (p1==p2 || p1.momid==p2.momid || p1.dadid == p2.dadid)
return true;
else
return false;
}
- Raminder August 03, 2019