1.删除元素
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
元素的顺序可以改变,并且对新的数组不会有影响。
样例:给出一个数组 [0,4,4,0,0,2,4,4],和值 4
返回 4 并且4个元素的新数组为[0,0,0,2]
public int removeElement(int[] A, int elem) {
if(A==null||A.length==0){
return 0;
}
int k=0;
ArrayList<Integer> list=new ArrayList<>();
for(int i=0;i<A.length;i++){
if(A[i]!=elem){
list.add(A[i]);
}
}
for(Integer i:list){
A[k++]=i;
}
return list.size();
}
2.删除数组中的重复数字
给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。
不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。
样例:给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。代码如下:
public int removeDuplicates(int[] nums) {
if(nums==null||nums.length==0){
return 0;
}
int index=0;
for(int i=1;i<nums.length;i++){
if(nums[index]!=nums[i]){
nums[++index]=nums[i];
}
}
return index+1;
}
3.删除排序数组中的重复数字 II
跟进“删除重复数字”:
如果可以允许出现两次重复将如何处理?
样例:给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A=[1,1,2,2,3]。
代码如下:
public int removeDuplicates(int[] nums) {
if(nums==null||nums.length==0){
return 0;
}
int index=0;
int count=1;
for(int i=1;i<nums.length;i++){
if(nums[i]!=nums[index]){
nums[++index]=nums[i];
count=1;
}
else if(nums[i]==nums[index]&&count<2){
nums[++index]=nums[i];
count++;
}
}
return index+1;
}