剛剛與TripAdvisor進行了一次電話採訪(並沒有進行減價)。TripAdvisor訪談。有沒有比我給的更好的算法?
我被給了下面的代碼,並被要求實現findBestTravelAlert
(用Java)。
給定TravelAlert對象的列表,找到要顯示的特定位置的最佳旅行警報。看到http://www.tripadvisor.com/Tourism-g147306-Haiti-Vacations.html
class TravelAlert {
int id;
String message;
int locationId;
}
class Location {
int locationId;
int parentLocationId; // -1 if no parent, location is hierarchy
String name;
static Location findLocation(int locationId) {...}
}
class TravelAlertStore {
private List<TravelAlert> lAlerts; // already populated, static
// Return null if no alert
TravelAlert findBestTravelAlert(int locationId) {
// implement this
}
}
例子例如:如果我們有3個旅遊警示,一個在波士頓,一個在馬薩諸塞州,一個在美國:
- 用戶看着波士頓特定頁面應該看到波士頓的旅行警告,而不是馬薩諸塞州的
- 看着馬薩諸塞頁面的用戶應該看到的 旅行警報馬薩諸塞
- 一款採用了一個[R看着牛頓特定的頁面應該看到馬薩諸塞 旅行警報
- 看着NYC特定 頁面應該看到,美國的用戶外遊警示
- 看着滿地特定 頁面的用戶應該會看到沒有外遊警示。
我做這是相當幼稚的方式,但它是所有我能想出的壓力:
中搜索TravelAlerts
列表,看看locationId
比賽,我們locationId
的。如果沒有,請重複搜索並檢查父母的locationId
的匹配項。如果在這個過程中的任何一點,我們找到一個匹配,返回TravelAlert
。如果我們到達過程的末尾(即沒有父母位置),請返回null
。
下面的代碼:
TravelAlert findBestTravelAlert(int locationId) {
TravelAlert current_alert = searchList(locationId, lAlerts);
if(current_alert != null) {
return current_alert;
}
else {
int parentLocationId = findLocation(locationId).parentLocationId;
if(parent_locId == -1)
return null;
else {
return findBestTravelAlert(parentLocationId);
}
}
}
TravelAlert searchList(int locationId, List<TravelAlert> cur_list) {
if(cur_list == null) {
return null;
}
else if(cur_list.locationId == locationId) {
return cur_list;
}
else {
searchList(locationId, cur_list.next())
}
}
的時間複雜度是O(NK),其中Ñ是TravelAlerts的列表的長度和ķ是位置分層結構樹的高度。
所以,我的問題是:
- 是否有這樣做的更好的算法,並
- 有沒有實現我的算法的更好的辦法?
我確定第二個問題的答案是肯定的;必須有我可以使用的內置方法,我是否更熟悉Java。
任何幫助,將不勝感激。祝所有未來的申請人都好運!
有一點我不明白的解決方案是爲什麼你把while循環「&& locationId> 0」。從邏輯上講,我認爲它是有道理的,但上面的定義表明,當沒有結果時,findLocation將返回-1。那麼爲什麼不明確檢查-1?特別是因爲它沒有說其他負數不能成爲有效的locationIds。 Int.MinValue和-2之間以及0到Int.MaxValue之間可以存在位置id。 (我知道這可能不會發生在現實生活中,但仍然基於我將使用-1的問題進行正確性) – 2014-05-09 03:56:14