懶人讀演算法 一 尋找名人

2021-08-09 05:23:55 字數 979 閱讀 7906

假設一場聚會有n個人,他們中間可能存在乙個名人。名人的定義是在場的人都認識他,而他卻不認識所有人。

已知條件:

1.函式knows(a,b)告訴你a是否認識b,返回bool值

你要做的事:確定這場聚會是否有名人的存在,如果不存在則return -1

答案:

public

class

solution

extends

relation

}//check that everyone else knows the candidate

for(int i = 0; i < n; i++)

}//return the celebrity

return candidate;

}}

演算法解析:因為名人不認識所有人,所有人認識名人,可以根據這個性質,來遍歷所有人.

int candidate = 0;

//find viable candidate

for(int i = 1; i < n; i++)

}

**解釋:假設3號是名人,總共5個人。因為所有人認識名人,所以knows(candidate, 3)肯定成立,潛在的名人candidate=3。而名人不認識所有人,所以knows(3,i)不可能再成立.由此可以確定名人是誰。

但是根據這個條件還不能完全確定這個人是不是名人。因為以上條件僅僅確定名人不認識剩下的所有人。

所以要再來一次遍歷

//check that everyone else knows the candidate

for(int i = 0; i < n; i++)

}

**解釋:如果當前的人不是名人且名人如果認識其中任何乙個人,或其他人不認識名人,則說明不存在名人.

本題解析:抓住題幹資訊,考慮問題全面即可解答

懶人讀演算法 二 細胞問題

細胞問題 每個細胞有兩種狀態 1為活細胞,0為死細胞,對於每個位置都滿足如下的條件 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞周圍八個位置有兩個或三個活細胞,則該位置活細胞仍然存活 如果活細胞周圍八個位置有超過三個活細胞,則該位置活細胞死亡 如果死細胞周圍正好有三個活細...

懶人讀演算法(七) 旋轉矩陣

給乙個數字n,你要畫出從1到n平方的旋轉矩陣 如n 3,則你要畫出一下的乙個陣列 1,2,3 8,9,4 7,6,5 答案 public class solution 確定1,2,3 rowstart 行開始加1 for int i rowstart i rowend i 確定4,5 colend ...

懶人讀演算法 八 所有子集

給乙個唯一的陣列,返回所有該陣列的子集 例如 nums 1,2,3 返回 3 1 2 1,2,3 1,3 2,3 1,2 答案 public class solution private void recurse list result,int nums,stack path,int positio...