Problem Statement
Given an array of unsorted numbers and a target, remove all occurances of target from it. After removing target in-place return the new length of the array.
In-place: Do not use Extra Space.
Example:
Input: arr: [1, 4, 9, 2, 3, 4, 4, 10, 4], target: 4 Output: 5 Explanation: After removing all occurances of 4 from arr. The new length of the array will be 5 with [1, 9, 2, 3, 10].
Code
Java
C++
Python
class Innoskrit { public static int removeTarget(int arr[], int target) { int unique = 0; for(int duplicate = 0; duplicate < arr.length; duplicate++) { if(arr[duplicate] != target) { arr[unique] = arr[duplicate]; unique++; } } return unique; } public static void main(String[] args) { int arr[] = new int[] {1, 4, 9, 2, 3, 4, 4, 10, 4}; int target = 4; int ans = Innoskrit.removeTarget(arr, target); System.out.println(ans); } }
#include<bits/stdc++.h> using namespace std; class Innoskrit { public: static int removeTarget(vector<int> &arr, int target) { int unique = 0; for(int duplicate = 0; duplicate < arr.size(); duplicate++) { if(arr[duplicate] != target) { arr[unique] = arr[duplicate]; unique++; } } return unique; } }; int main() { vector<int> arr = {1, 4, 9, 2, 3, 4, 4, 10, 4}; int target = 4; int ans = Innoskrit::removeTarget(arr, target); cout << ans; return 0; }
class Innoskrit: @staticmethod def remove_target(arr, target): unique = 0 for duplicate in range(0, len(arr)): if arr[duplicate] != target: arr[unique] = arr[duplicate] unique += 1 return unique if __name__ == '__main__': arr = [1, 4, 9, 2, 3, 4, 4, 10, 4] target = 4 ans = Innoskrit.remove_target(arr, target) print(ans)
Output:
5
Time and Space Complexity
Time Complexity: O(N)
Space Complexity: O(1)