27.Remove Element---两指针

题目链接: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     }
View Code

法二:正向思考,直接删除值,也就是每删除一个值,就记录一下个数,然后在将不等于当前值的数留在数组中时,更新下标是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     }
View Code

 

posted on 2018-03-09 09:11  二十年后20  阅读(107)  评论(0编辑  收藏  举报

导航