其他分享
首页 > 其他分享> > 数组-原地删除排序数组重复项

数组-原地删除排序数组重复项

作者:互联网

题目说明

力扣链接

示例 1:
输入:nums = [1,1,2]
输出:2, nums = [1,2]
示例 2:
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
提示:
0 <= nums.length <= 3 * 10^4
-10^4 <= nums[i] <= 10^4
nums已按升序排列

解法

【基于Java】

//-----------------main------------------------
	// 可改成控制台输入
	int[] nums = {1,2,3,5,6,6};
	int realLength = delMultiNum(nums);
	// 输出格式
	System.out.println("去重后数组元素长度为:" + realLength);
 	System.out.print("[");
	for (int i = 0; i < realLength; i++){
		 if(i+1 == realLength){
		 	System.out.print(nums[i]);
		 } else {
	    	System.out.print(nums[i]+",");
	    }
	}
	 System.out.print("]");
//-----------------method------------------------	
	private static int delMultiNum(int[] nums) {
		// 定义快慢指针
		int i = 0;
		int j = 1;
		// 排除异常情况
		int length = nums.length;
		if (length == 0 || length == 1 ){
		    return length;
		}
		while (j < length){
			// 如果慢指针所指的值小于了快指针所指的值
		    if (nums[i] < nums[j]){
		    	// 说明慢指针的下一个位置上的值应该是快指针所指的值
		        nums[i+1] = nums[j];
		        // 不必再比较当前位置了,于是慢指针后移
		        i++;
		    }
		    // 每一轮比较时:
		    // 不符合赋值情况:快指针后移,比较下一个;
		    // 符合赋值情况:赋值后慢指针和快指针所指的值一定相同,没有再次比较的必要,快指针也后移
	        j++;
		}
		// 因为是返回数组长度,所以要元素下标加1
		return i+1;
	}

思路

图解

步骤详解

标签:nums,int,System,原地,length,数组,排序,out,指针
来源: https://blog.csdn.net/AZHOU_princeSS/article/details/123082893