输入一个整型数组nums和一个整型数val,要求删除数组中值为val的元素并将删除后的该数组长度返回
要求程序占用的空间复杂度为O(1)。
eg.
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
It doesn’t matter what you leave beyond the returned length.
思路:已经限定了空间复杂度为O(1),就意味着实现过程中不能用创建新的数组来记录过滤的结果;首先遍历了下数组,记录数组元素值为val的索引保存成一个索引队列,然后遍历索引队列,使用pop内建方法来对输入数组进行操作。
附上python代码
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
index_list = []
for i in xrange(len(nums)):
if nums[i] == val:
index_list.append(i)
count = 0
for index in index_list:
nums.pop(index-count)
count += 1
return len(nums)
运行了下,竟然Accepted了。
思考:其实要求程序空间复杂度为O(1),但是上述代码在实现时新建的索引队列的空间复杂度为O(m)毕竟,居然能通过leecode评判也不可思议了。还是其实对复杂度理解有出处,其实O(m)~O(1)