26 删除有序数组的重复项
要求在原位置就地删除:
因为数组已经有序,那么用后面的把重复项取代,然后统计个数
对第一个数 进行统计 并统计个数为1
然后后面循环再进行判断就是 判断 for循环中的数,与nums[n-1] 进行相比
这样的操作就是只有遇到重复的项目 n才会移动 且重复项会消除一个
class Solution {
public int removeDuplicates(int[] nums) {
int n=0;
for(int num:nums){
if(n==0||num!=nums[n-1]){
//首项统计 和 不重复时 原来的数值 重新赋值一遍 重复时,不会进入循环体 直到后面num不等于前面一项,这样它也会取代n位置的数组 n是不重复的个数
nums[n]=num;
++n;
}
}
return n;
}
}
27移除元素
把数组中某一元素就地移除:
将数组中的合法元素统计个数,并取代之前的不合法数,即合法前移覆盖了不合法数,最后统计n个合法数
class Solution {
public int removeElement(int[] nums, int val) {
int n=0;
//[3,2,2,3] 3
for(int num:nums){
if(n==0||num!=val){
nums[n]=num;
if(num!=val) ++n;
}
}
return n;
}
}
class Solution {
public int removeDuplicates(int[] nums) {
//最多保留2个
int n=0;
for(int num:nums){
if(n<=1 || num!=nums[n-2]){//后续相同的数 a b 到b时 a已经移到n位置上去了 a b原本差一个
//a移动之后,因为是原地移动 也在前面一个 所以和n-2进行相比
nums[n]=num;
n++;
}
}
return n;
}
}