My experience of solving algorithmic problem of removing element from an array.

A photo of Betizazu Alemu looking professional.
Betizazu Alemu
  • 2 min read

Problem description

Remove element from unsorted array.

Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The order of the elements may be changed. Then return the number of elements in nums which are not equal to val.

Examples

Input: nums = [3, 2, 2, 3], val = 3

Output: 2, nums = [2, 2, _, _]

Explanation: Your function should return k = 2, with the first two elements of nums being 2. It does not matter what you leave beyond the returned k (hence they are underscores).

Input: nums = [0, 1, 2, 2, 3, 0, 4, 2], val = 2

Output: 5, nums = [0, 1, 4, 0, 3, _, _, _]

Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4. Note that the five elements can be returned in any order.

You can find a brief description about the problem here.

Experience

My intuition is straightforward. I hold two counters; one counts elements that are not equal to the value from front to back, and the other counts the occurrences of the value from back to front, and I stop the loop when they meet somewhere in the middle. I am holding two counters because I can replace the occurrences of the value from the front with the elements that are not equal to the value from the back.

The results

  • Runtime: 32 ms, faster than 96.76% of Python3 online submissions for Remove Element problem.
  • Memory Usage: 13.9 MB, less than 14.38% of Python3 online submissions for Remove Element problem.

The code

python
def removeElement(nums: List[int], val: int) -> int:
	valCounter = 0
	iterator = 0
	numsLength = len(nums)
	
	while iterator < numsLength:
		if nums[iterator] == val:
			valCounter += 1
	
			while valCounter < numsLength and  nums[-valCounter] == val:
				valCounter += 1
			nums[iterator] = nums[-valCounter]
	
		if iterator >= (numsLength - valCounter): break
		iterator += 1
	
	return iterator

Discover related blog posts that delve into similar themes, share valuable insights, and offer fresh perspectives.