forked from kamyu104/LeetCode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathminimum-number-of-operations-to-make-array-continuous.py
More file actions
47 lines (42 loc) · 1.14 KB
/
minimum-number-of-operations-to-make-array-continuous.py
File metadata and controls
47 lines (42 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Time: O(nlogn)
# Space: O(1)
class Solution(object):
def minOperations(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
def unique(nums):
left = 0
for right in xrange(1, len(nums)):
if nums[left] != nums[right]:
left += 1
nums[left] = nums[right]
return left
def erase(nums, i):
while len(nums) > i+1:
nums.pop()
n = len(nums)
nums.sort()
erase(nums, unique(nums))
result = l = 0
for i in xrange(len(nums)):
if nums[i] <= nums[i-l]+n-1:
l += 1
return n-l
# Time: O(nlogn)
# Space: O(n)
class Solution2(object):
def minOperations(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
nums = sorted(set(nums))
result = right = 0
for left in xrange(len(nums)):
while right < len(nums) and nums[right] <= nums[left]+n-1:
right += 1
result = max(result, right-left)
return n-result