File tree Expand file tree Collapse file tree 1 file changed +54
-0
lines changed
Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution :
2+ """
3+ @param numbers: the numbers
4+ @return: the minimum cost
5+ """
6+ def mergeNumber (self , numbers ):
7+ # Write your code he
8+ """
9+ 可以证明从最小的数开始加,
10+ 和的话送回到队列重新排序,
11+ 排序比较慢,所以做个最小堆。
12+ """
13+ ret = 0
14+ heap = Heap (numbers )
15+ while len (heap .data ) > 1 :
16+ a = heap .pop ()
17+ b = heap .data [0 ]
18+ ret += (a + b )
19+ heap .data [0 ] = (a + b )
20+ heap .adjustDown (0 )
21+ return ret
22+
23+
24+ class Heap :
25+ def __init__ (self , numbers ):
26+ self .data = numbers
27+ for i in range (int ((len (self .data ) - 1 ) / 2 ), - 1 , - 1 ):
28+ self .adjustDown (i )
29+
30+ def adjustDown (self , i ):
31+ data = self .data
32+ while i < len (data ):
33+ left , right = i * 2 + 1 , i * 2 + 2
34+ min_pos = i
35+ if (left < len (data )) and (data [left ] < data [min_pos ]):
36+ min_pos = left
37+ if (right < len (data )) and (data [right ] < data [min_pos ]):
38+ min_pos = right
39+ if min_pos != i :
40+ data [i ], data [min_pos ] = data [min_pos ], data [i ]
41+ i = min_pos
42+ else :
43+ break
44+
45+ def pop (self ):
46+ ret = self .data [0 ]
47+ self .data [0 ], self .data [- 1 ] = self .data [- 1 ], self .data [0 ]
48+ self .data .pop ()
49+ if not self .empty ():
50+ self .adjustDown (0 )
51+ return ret
52+
53+ def empty (self ):
54+ return len (self .data ) == 0
You can’t perform that action at this time.
0 commit comments