Leetcode-27-Remove Element
Remove Element
leetcode: https://leetcode.com/problems/remove-element/
Description:
Given an integer array nums
and an integer val
, remove all occurrences of val
in nums
in-place. The relative order of the elements may be changed.
Since it is impossible to change the length of the array in some languages, you must instead have the result be placed in the first part of the array nums
. More formally, if there are k
elements after removing the duplicates, then the first k
elements of nums
should hold the final result. It does not matter what you leave beyond the first k
elements.
Return k
after placing the final result in the first k
slots of nums
.
Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.
Idea:
Step1: set two pointers, first one to traverse the nums array, and use second one to recod the non-val element and use them to cover the val element.
Step2: because we don’t need to deal with the extra elements after covering, and the second pointer also record the length of non-value elements in the string. just use the index to get the non-val nums array.
Code:
class Solution {
public int removeElement(int[] nums, int val) {
// set two pointers, and make the second pointer point to the non-val element, and use second to record current length of non-val
int first = 0;
int second = 0;
// because it don't need to deal with the extra elements when after cover the val element, so just use first pointer to traverse the nums, and use second pointer to record the value and the length
for(; first<nums.length; first++){
if(nums[first] != val){
// use second pointer to cover and record length by self-increasing
nums[second++] = nums[first];
}
}
return second;
}
}