Skip to content

Commit ab7b8f0

Browse files
authored
Update minimum-absolute-difference-queries.py
1 parent ca573fc commit ab7b8f0

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

Python/minimum-absolute-difference-queries.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
# Time: O(r * (n + q)), r is the max of nums
22
# Space: O(r * n)
33

4-
import itertools
5-
6-
74
class Solution(object):
85
def minDifference(self, nums, queries):
96
"""
107
:type nums: List[int]
118
:type queries: List[List[int]]
129
:rtype: List[int]
1310
"""
11+
INF = float("inf")
1412
prefix = [[0]*(max(nums)+1)]
1513
for num in nums:
1614
prefix.append(prefix[-1][:])
1715
prefix[-1][num] += 1
1816
result = []
1917
for l, r in queries:
20-
sub_nums = [num for cnt1, cnt2, num in itertools.izip(prefix[l], prefix[r+1], xrange(len(prefix[0]))) if cnt1 < cnt2]
21-
result.append(min([b-a for a, b in itertools.izip(sub_nums, itertools.islice(sub_nums, 1, len(sub_nums)))] or [-1]))
18+
min_diff, prev = INF, -1
19+
for num in xrange(len(prefix[0])):
20+
if not (prefix[l][num] < prefix[r+1][num]):
21+
continue
22+
if prev != -1:
23+
min_diff = min(min_diff, num-prev)
24+
prev = num
25+
result.append(min_diff if min_diff != INF else -1)
2226
return result
2327

2428

@@ -43,9 +47,10 @@ def minDifference(self, nums, queries):
4347
min_diff, prev = INF, -1
4448
for num in xrange(len(idxs)):
4549
i = bisect.bisect_left(idxs[num], l)
46-
if i < len(idxs[num]) and idxs[num][i] <= r:
47-
if prev != -1:
48-
min_diff = min(min_diff, num-prev)
49-
prev = num
50+
if not (i < len(idxs[num]) and idxs[num][i] <= r):
51+
continue
52+
if prev != -1:
53+
min_diff = min(min_diff, num-prev)
54+
prev = num
5055
result.append(min_diff if min_diff != INF else -1)
5156
return result

0 commit comments

Comments
 (0)