Remove Element is a Leetcode problem that presents this challenge:
Given an integer array
nums
and an integerval
, remove all occurrences ofval
innums
in-place. The order of the elements may be changed. Then return the number of elements innums
which are not equal toval
.
If you ignore the in-place requirement, you could do this with an ArrayList
:
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i < nums.length; i++){
list.add(nums[i]);
}
int removed = 0;
while(list.remove(Integer.valueOf(val))){
removed++;
}
for(int i = 0; i < list.size(); i++){
nums[i] = list.get(i);
}
return nums.length - removed;
To do it in-place (without creating any other data structures), you might loop over each element. When you find a match to be removed, you can use another for
loop to shift every subsequent element left by one:
int notEqualCount = 0;
for (int i = 0; i < nums.length; i++) {
int element = nums[i];
if(element != val){
notEqualCount++;
} else {
// Shift every subsequent element left by one
for(int j = i; j < nums.length - 1; j++) {
nums[j] = nums[j+1];
}
// Keep i at the same index to avoid skipping shifted elements
i--;
}
}
return notEqualCount;
This works, but it’s inefficient (O(n^2)) because it shifts the entire array left every time it finds a match.
Instead, you can use two pointers to process the array in a single pass:
class Solution {
public int removeElement(int[] nums, int val) {
int leftIndex = 0;
for (int rightIndex = 0; rightIndex < nums.length; rightIndex++) {
int rightElement = nums[rightIndex];
if (rightElement != val) {
nums[leftIndex] = rightElement;
leftIndex++;
}
}
return leftIndex;
}
}
Using two pointers is a common approach for processing arrays or strings, so make sure it’s in your back pocket for problems like this.
I posted a new code along for the Remove Element Leetcode problem.
Check it out here:
Return the index of an item, even if it's not in the array.
Happy Coding is a community of folks just like you learning about coding.
Do you have a comment or question? Post it here!
Comments are powered by the Happy Coding forum. This page has a corresponding forum post, and replies to that post show up as comments here. Click the button above to go to the forum to post a comment!