File tree Expand file tree Collapse file tree 1 file changed +100
-0
lines changed Expand file tree Collapse file tree 1 file changed +100
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Heap {
2
+ var heap = [ [ 0 ] ]
3
+
4
+ var count : Int {
5
+ heap. count - 1
6
+ }
7
+
8
+ var first : [ Int ] {
9
+ heap [ 1 ]
10
+ }
11
+
12
+ func heapify( _ arr: [ [ Int ] ] ) {
13
+ heap = arr
14
+ heap. append ( arr [ 0 ] )
15
+ var cur = ( heap. count - 1 ) / 2
16
+ while cur > 0 {
17
+ var i = cur
18
+ while 2 * i < heap. count {
19
+ if 2 * i + 1 < heap. count && heap [ 2 * i + 1 ] [ 0 ] < heap [ 2 * i] [ 0 ] && heap [ i] [ 0 ] > heap [ 2 * i + 1 ] [ 0 ] {
20
+ let tmp = heap [ i]
21
+ heap [ i] = heap [ 2 * i + 1 ]
22
+ heap [ 2 * i + 1 ] = tmp
23
+ i = 2 * i + 1
24
+ } else if heap [ i] [ 0 ] > heap [ 2 * i] [ 0 ] {
25
+ let tmp = heap [ i]
26
+ heap [ i] = heap [ 2 * i]
27
+ heap [ 2 * i] = tmp
28
+ i = 2 * i
29
+ } else {
30
+ break
31
+ }
32
+ }
33
+ cur -= 1
34
+ }
35
+ }
36
+
37
+ func push( _ val: [ Int ] ) {
38
+ heap. append ( val)
39
+ var i = heap. count - 1
40
+ while i > 1 && heap [ i] [ 0 ] < heap [ i / 2 ] [ 0 ] {
41
+ let tmp = heap [ i]
42
+ heap [ i] = heap [ i / 2 ]
43
+ heap [ i / 2 ] = tmp
44
+ i = i / 2
45
+ }
46
+ }
47
+
48
+ func pop( ) -> [ Int ] ? {
49
+ if heap. count == 1 {
50
+ return nil
51
+ }
52
+ if heap. count == 2 {
53
+ return heap. popLast ( )
54
+ }
55
+ let res = heap [ 1 ]
56
+ heap [ 1 ] = heap. removeLast ( )
57
+ var i = 1
58
+ while 2 * i < heap. count {
59
+ if 2 * i + 1 < heap. count && heap [ 2 * i + 1 ] [ 0 ] < heap [ 2 * i] [ 0 ] && heap [ i] [ 0 ] > heap [ 2 * i + 1 ] [ 0 ] {
60
+ let tmp = heap [ i]
61
+ heap [ i] = heap [ 2 * i + 1 ]
62
+ heap [ 2 * i + 1 ] = tmp
63
+ i = 2 * i + 1
64
+ } else if heap [ i] [ 0 ] > heap [ 2 * i] [ 0 ] {
65
+ let tmp = heap [ i]
66
+ heap [ i] = heap [ 2 * i]
67
+ heap [ 2 * i] = tmp
68
+ i = 2 * i
69
+ } else {
70
+ break
71
+ }
72
+ }
73
+ return res
74
+ }
75
+ }
76
+
77
+ class Solution {
78
+ func minInterval( _ intervals: [ [ Int ] ] , _ queries: [ Int ] ) -> [ Int ] {
79
+ var intervals = intervals. sorted ( by: { $0 [ 0 ] < $1 [ 0 ] } )
80
+ let minHeap = Heap ( )
81
+ var res = [ Int: Int] ( )
82
+ var i = 0
83
+ for q in queries. sorted ( ) {
84
+ while i < intervals. count && intervals [ i] [ 0 ] <= q {
85
+ let l = intervals [ i] [ 0 ]
86
+ let r = intervals [ i] [ 1 ]
87
+ minHeap. push ( [ r - l + 1 , r] )
88
+ i += 1
89
+ }
90
+
91
+ while minHeap. count > 0 && minHeap. first [ 1 ] < q {
92
+ minHeap. pop ( )
93
+ }
94
+
95
+ res [ q] = minHeap. count > 0 ? minHeap. first [ 0 ] : - 1
96
+ }
97
+
98
+ return queries. map { res [ $0] ?? - 1 }
99
+ }
100
+ }
You can’t perform that action at this time.
0 commit comments