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 }
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 }