LeetCode – Remove Element (Java)

Given an array and a value, remove all instances of that value in place and return the new length. (Note: The order of elements can be changed. It doesn't matter what you leave beyond the new length.)

Java Solution

This problem can be solve by using two indices.

public int removeElement(int[] A, int elem) {
    int i=0;
    int j=0;
 
    while(j < A.length){
        if(A[j] != elem){
            A[i] = A[j];
            i++; 
        }
 
        j++;
    }
 
    return i;
}
Category >> Algorithms >> Interview  
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
<pre><code> 
String foo = "bar";
</code></pre>
  • utkarsha srivastava

    Easiest way as above solution is not giving result in all scenarios. In addition I have used JAVA 8 .

    public int removeElement(int[] nums, int val) {

    int[] result = Arrays.stream(nums)

    .filter(num -> num != val).toArray();
    int j=0;
    for(int i =0;i<result.length;i++){
    nums[j] = result[i];
    j++;
    }
    Arrays.stream(nums).forEach(System.out::println);
    System.out.println("len"+j);
    return j;

    }

  • Alik Elzin

    Love the solution. Very clean.
    I thought of using two indexes – and replacing the the removed value with the non-removed.
    This changes the order but the question says it’s ok:

    int removeInstancesInPlace(int[] arr, int value)
    {
    for (int i = 0, end = arr.length-1 ; i <= end;)
    {
    if (arr[i] != value)
    {
    i++;
    continue;
    }

    arr[i] = arr[end];
    end--;
    }

    return end;
    }


  • class Solution {
    public:
    int removeElement(vector& nums, int val) {
    int lastIndex = 0;
    for(int i = 0; i < nums.size(); i++) {
    if(nums[i] != val) nums[lastIndex++] = nums[i];
    }
    return lastIndex;
    }
    };

  • skylogic

    dude its not wrong logic is correct. I dont get your point why the array you provide is not consistent with this code since i pass all testcases on leetcode with this similar logic code

  • lala

    public class Solution {

    public int removeElement(int[] nums, int val) {

    if(nums == null || nums.length == 0){

    return 0;

    }

    int i = 0, j = nums.length -1;

    while(i<= j){

    if (nums[i] == val){

    if(nums[j] ==val){

    j–;

    continue;

    }else{

    nums[i] = nums[j];

    j–;

    }

    }

    i++;

    }

    return i;

    }

    }

  • NEWLIGHT

    This solution is incorrect. You cannot ensure all duplicates would be removed not using another array or a default value for these duplicate values. Consider using this method with the int [ ] {2, 7, 7, 4}. The logic will not remove any of the duplicates.