Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example:Given input array nums = [3,2,2,3] , val = 3
Your function should return length = 2, with the first two elements of nums being 2.
給定一個array和一個值,將數組中相同的值去掉,返回新的數組的長度。
算法分析
方法一:
算法跟LeetCode-26思路一樣。具體參見Remove Duplicates from Sorted Array
代碼
public class Solution {
public int removeElement(int[] nums, int val) {
int n = nums.length;
if (n == 0) return 0;
int index = 0;
for (int i = 0; i < n; i++) {
if (nums[i] != val) {
nums[index] = nums[i];
index ++;
}
}
return index;
}
}
方法二
現在考慮如下情況:nums=[1,2,3,5,4],val=4
,方法一會復制前面四個值,很沒有必要。因此可以考慮把這些沒有必要的步驟去掉。如下情況:nums = [4,1,2,3,5], val = 4
。nums[i] == val
時,將左后一個值與當前值交換。
代碼
public class Solution {
public int removeElement(int[] nums, int val) {
int n = nums.length;
int i = 0;
while (i < n) {
if (nums[i] == val) {
nums[i] = nums[n - 1];
n --;
} else {
i ++;
}
}
return i;
}
}