题目链接:https://leetcode.com/problems/remove-element/description/
题目大意:给出一个数组和一个值,从数组中删除与当前值相等的值,并将数组长度返回,最终数组中元素的顺序可以不保持原顺序,也就是允许排序。
法一:反向思考,不直接删除值,而是将不等于当前值的其他数保留在数组中,用一个下标值重新记录数组下标。代码如下(耗时11ms):
1 public int removeElement(int[] nums, int val) { 2 int k = 0; 3 for(int i = 0; i < nums.length; i++) { 4 if(nums[i] != val) { 5 nums[k++] = nums[i]; 6 } 7 } 8 return k; 9 }
法二:正向思考,直接删除值,也就是每删除一个值,就记录一下个数,然后在将不等于当前值的数留在数组中时,更新下标是i-k。代码如下(耗时9ms):
1 public int removeElement(int[] nums, int val) { 2 int k = 0, i = 0; 3 for( ; i < nums.length; i++) { 4 if(nums[i] == val) { 5 k++; 6 } 7 else { 8 nums[i - k] = nums[i]; 9 } 10 } 11 return i - k; 12 }