題目描述:示例 1:
輸入:n = 4, dislikes = [[1,2],[1,3],[2,4]]
輸出:true
解釋:group1 [1,4], group2 [2,3]
示例 2:
輸入:n = 3, dislikes = [[1,2],[1,3],[2,3]]
輸出:false
示例 3:
輸入:n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]
輸出:false
1 <= n <= 2000
0 <= dislikes.length <= 10000
dislikes[i].length == 2
1 <= dislikes[i][j] <= n
dislikes[i][0] < dislikes[i][1]
對於 dislikes[i] == dislikes[j] 不存在 i != j
方法1:
(1)先將不喜歡的關係,既不能同時存在於一組的關係,建立圖;
(2)每次以乙個不能共存的關係為基礎,將相關的具有不能共存於一組的關係,分配到兩個組中;
(3)然後再去找下一組不能共存的關係;
class
solution
//分別儲存兩組
queue<
int> q_1;
queue<
int> q_2;
//表示兩個組中已經分配過的點
vector<
bool
>
sign_1
(n+1
,false);
vector<
bool
>
sign_2
(n+1
,false);
for(
int i=
1;i<=n;
++i)
q_1.
push
(i);
//初始化分一組
//盡量將相關的不能共存的關係進行分配
while
(true
)while
(!q_1.
empty()
)if(sign_2[j]
) q_2.
push
(j);
//不能共存的關係分配到另一組}}
while
(!q_2.
empty()
)if(sign_1[j]
) q_1.
push
(j);}}
}}return
true
;//分配結束}}
;
886 可能的二分法
給定一組 n 人 編號為 1,2,n 我們想把每個人分進任意大小的兩組。每個人都可能不喜歡其他人,那麼他們不應該屬於同一組。形式上,如果 dislikes i a,b 表示不允許將編號為 a 和 b 的人歸入同一組。當可以用這種方法將所有人分進兩組時,返回 true 否則返回 false。impor...
可能的二分法
給定一組 n 人 編號為 1,2,n 我們想把每個人分進任意大小的兩組。每個人都可能不喜歡其他人,那麼他們不應該屬於同一組。形式上,如果 dislikes i a,b 表示不允許將編號為 a 和 b 的人歸入同一組。當可以用這種方法將所有人分進兩組時,返回 true 否則返回 false。示例 1 ...
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...