27. Remove Element
Given an array and a val remove all it occurrences in-place and return the number of remaining elements
Input:
nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]if there are k occurrence of val change the array nums such that the first k elements of nums contain the elements which are not equal to val.
Intuition
- An element shifts by the occurrence amount of
valbefore it.
Approach
- Start from beginning of the array tracking the occurrence of
val(lets say its tracked byi) - Move an elements
isteps forward in array if there areioccurrence ofvalbefore it.
Complexity
- Time complexity :
- as we iterate the array only once
- Space complexity :
- No extra space is needed as everything is done in place
Code
public int removeElement(int[] nums, int val) {
// This will track the occurrence count of the val
int placesToBeMovedBy = 0;
for (int i = 0; i < nums.length; ++i) {
// If current value is val increase the occurrence count and continue
if(nums[i] == val) {
placesToBeMovedBy++;
continue;
}
// If there is an occurence of val we can overwrite it
nums[i - placesToBeMovedBy] = nums[i];
}
return nums.length - placesToBeMovedBy;
}