26、题目描述:
题目中需要注意的几个点:
①原地修改数组,不允许使用额外的空间, 这个就需要你在比较数组中是否存在重复项的时候,需要把不重复的元素值从0开始,把数组的值往后覆盖。
②如果输入的数组的长度为0或者为1,则就不存在当前元素和下一个元素进行比较的情况,所以就直接返回0或者1即可;
实现代码如下:
class Solution {
public int removeDuplicates(int[] nums) {
int p = 0;
int len = 0;
int k = 0;
if (nums.length < 2) {
return nums.length;
}
for (int i = 0; i < nums.length; i++) {
if (nums[p] != nums[i]) {
p = i;
}
if (nums[p] == nums[i] && p == i) {
nums[k] = nums[p];
k++;
len++;
}
}
//System.out.println("长度 = " + len);
return len;
}
}
27、题目描述
27题的思路和26题的思路基本是相同的;
代码实现如下:
class Solution {
public int removeElement(int[] nums, int val) {
if (nums.length == 0) {
return 0;
}
if (nums.length == 1 && nums[0] == val) {
return 0;
}
if (nums.length == 1 && nums[0] != val) {
return 1;
}
int p = 0;
int len = 0;
int k = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == val) {
continue;
}
else {
nums[k] = nums[i];
len++;
k++;
}
}
return len;
}
}