Problem
Given an array and a value, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
The order of elements can be changed. It doesn’t matter what you leave beyond the new length.
Example:
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
Solution
proc removeElement(nums: var seq[int], val: int): int =
var n = 0
for i in 0 ..< nums.len:
if nums[i] != val:
nums[n] = nums[i]
n += 1
result = n
when isMainModule:
var nums = @[3, 2, 2, 3]
assert removeElement(nums, 3) == 2
assert nums[0] == 2 and nums[1] == 2
近期评论