26--删除排序数组中的重复项

 

 这道题答案采用了双指针,太优雅了。

先看下代码:

 1 class Solution {
 2     public int removeDuplicates(int[] nums) {
 3       if (nums.length == 0) return 0;
 4     int i = 0;
 5     for (int j = 1; j < nums.length; j++) {
 6         if (nums[j] != nums[i]) {
 7             i++;
 8            nums[i] = nums[j];
 9         }
10     }
11     return i + 1;
12 
13 }
14 }
View Code

j是快指针,用于扫描这个数组中所有的数,i是慢指针,用于记录不重复数字的个数。

将数组nums[j]与nums[i]进行比较,如果不一样,计数i+1,那么此时需要将nus[j]的值

赋给“新数组”中第i个元素的值,最后扫描完返回i+1就是新数组的长度。

下面看一道类似的题:

 

 

 这道题和上面那道题思路是一样的,都是采用了双指针的方法。

同样的,用j来遍历数组的数,用i来记录数组中的有效数字。

在循环中,如果数字和给定的val值不同,则将数值赋给nums[i],并将

计数加一。

代码如下:

 

 1 class Solution {
 2     public int removeElement(int[] nums, int val) {
 3         int i=0;
 4         for(int j=0;j<nums.length;j++)
 5         {
 6             if(nums[j]!=val)
 7             {nums[i]=nums[j];
 8                 i++;
 9 
10             }
11         }
12 return i;
13     }
14 }
View Code

 

posted @ 2020-08-08 11:10  卑微的孤独患者  阅读(142)  评论(0编辑  收藏  举报