File tree Expand file tree Collapse file tree 4 files changed +125
-0
lines changed Expand file tree Collapse file tree 4 files changed +125
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution (object ):
2
+ def isArmstrong (self , N ):
3
+ """
4
+ :type N: int
5
+ :rtype: bool
6
+ """
7
+ k = len (str (N ))
8
+ n = N
9
+ s = 0
10
+ while N :
11
+ N , tmp = divmod (N , 10 )
12
+ s += tmp ** k
13
+ return s == n
Original file line number Diff line number Diff line change
1
+ class Solution (object ):
2
+ def largestUniqueNumber (self , A ):
3
+ """
4
+ :type A: List[int]
5
+ :rtype: int
6
+ """
7
+ from collections import Counter
8
+ dic = Counter (A )
9
+
10
+ res = - 1
11
+ for key , val in dic .items ():
12
+ if val == 1 :
13
+ res = max (res , key )
14
+ return res
15
+
Original file line number Diff line number Diff line change
1
+ class UnionFindSet (object ):
2
+ def __init__ (self , n ):
3
+
4
+ # m, n = len(grid), len(grid[0])
5
+ self .roots = [i for i in range (n + 1 )]
6
+ self .rank = [0 for i in range (n + 1 )]
7
+ self .count = n
8
+
9
+ def find (self , member ):
10
+ tmp = []
11
+ while member != self .roots [member ]:
12
+ tmp .append (member )
13
+ member = self .roots [member ]
14
+ for root in tmp :
15
+ self .roots [root ] = member
16
+ return member
17
+
18
+ def union (self , p , q ):
19
+ parentP = self .find (p )
20
+ parentQ = self .find (q )
21
+ if parentP != parentQ :
22
+ if self .rank [parentP ] > self .rank [parentQ ]:
23
+ self .roots [parentQ ] = parentP
24
+ elif self .rank [parentP ] < self .rank [parentQ ]:
25
+ self .roots [parentP ] = parentQ
26
+ else :
27
+ self .roots [parentQ ] = parentP
28
+ self .rank [parentP ] -= 1
29
+ self .count -= 1
30
+
31
+ class Solution (object ):
32
+ def minimumCost (self , N , connections ):
33
+ """
34
+ :type N: int
35
+ :type conections: List[List[int]]
36
+ :rtype: int
37
+ """
38
+ from collections import deque
39
+ from heapq import *
40
+ ufs = UnionFindSet (N )
41
+ queue = []
42
+
43
+ for start , end , cost in connections :
44
+ ufs .union (start , end )
45
+ queue .append ([cost , start , end ])
46
+
47
+ if ufs .count != 1 :
48
+ return - 1 #无法连接在一起
49
+ #到这里可以保证一定可以把所有城市连在一起
50
+ ufs2 = UnionFindSet (N )
51
+ heapify (queue )
52
+ res = 0
53
+ while ufs2 .count > 1 :
54
+ cost , start , end = heappop (queue )
55
+ if ufs2 .find (start ) == ufs2 .find (end ):
56
+ continue
57
+ ufs2 .union (start , end )
58
+ res += cost
59
+ return res
60
+
61
+
Original file line number Diff line number Diff line change
1
+ class Solution (object ):
2
+ def minimumSemesters (self , N , relations ):
3
+ """
4
+ :type N: int
5
+ :type relations: List[List[int]]
6
+ :rtype: int
7
+ """
8
+ indegree = [0 for i in range (N + 1 )]
9
+ adj = [set () for _ in range (N + 1 )]
10
+ for pre , cur in relations :
11
+ indegree [cur ] += 1
12
+ adj [pre ].add (cur )
13
+
14
+ from collections import deque
15
+ queue = deque ()
16
+ for i , x in enumerate (indegree ):
17
+ if x == 0 and i > 0 :
18
+ queue .append (i )
19
+ print queue
20
+ cnt , res = 0 , 0
21
+ out = 0
22
+ while queue :
23
+ next_queue = deque ()
24
+ cnt += 1
25
+ for cur in queue :
26
+ out += 1
27
+ for neighbor in adj [cur ]:
28
+ indegree [neighbor ] -= 1
29
+
30
+ if indegree [neighbor ] == 0 :
31
+ next_queue .append (neighbor )
32
+ queue = next_queue
33
+ return cnt if out == N else - 1
34
+
35
+
36
+
You can’t perform that action at this time.
0 commit comments