leetcode26.删除排序数组中的重复项(双指针法,顺序表删除)

public class LeetCode26 {
public int Solution(int[] nums){
//标记数据,匹配成功一次加1
int x=0,y=0;
for(int i=1;i<=nums.length;i++){
if(nums[i-1]==nums[i]){
for(int j=i;j<nums.length;j++){
//顺序表删除基本操作
nums[j-1]=nums[j];
}
//i--目的是用当前值继续匹配
i--;
x++;
}
y++;
//如果当前值等于数组最后值,说明匹配结束
if(nums[i]==nums[nums.length-1]&&y==nums.length-1){
return nums.length-x;
}
}
return nums.length-x;
}

public int delete(int[] nums){
//leetcode极简解法,双指针法
int i=0;
for(int j=1;j<nums.length;j++){
if(nums[j]!=nums[i]){
//i++,使nums[j]值赋给nums[i]下一位
i++;
nums[i]=nums[j];
}
}
//最终结果+1因为第一位未算
return i+1;
}

public static void main(String args[]){
int[] nums={1,1,2,2,3,3,3,4,4};
LeetCode26 leetCode26=new LeetCode26();
System.out.println(leetCode26.delete(nums));
for (int i=0;i<nums.length;i++){
System.out.println(nums[i]);
}
}
}

/**leetcode提交代码,原始无改动
* public int Solution(int[] nums){
* //标记数据,匹配成功一次加1
* int x=0,y=0;
* for(int i=1;i<nums.length;i++){
* if(nums[i-1]==nums[i]){
* for(int j=i;j<nums.length;j++){
* //顺序表删除基本操作
* nums[j-1]=nums[j];
* }
* i--;
* x++;
* }
* y++;
* //如果当前值等于数组最后值,说明匹配结束
* if(nums[i]==nums[nums.length-1]&&y==nums.length-1){
* return nums.length-x;
* }
* }
* return nums.length-x;
* }
*/

猜你喜欢

转载自www.cnblogs.com/shudaixiongbokeyuan/p/13369039.html