26.删除排序数组中的重复项

题目:删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

思路:
1.数组完成排序后,设置两个指针 i 和 j,其中 j 是慢指针(记录新数组),而 i 是快指针(遍历原先数组)。
2.只要 nums[i] = nums[j],我们就增加 i 以跳过重复项,继续遍历。
3.当 nums[i] ≠ nums[j],并将 nums[i] 赋予 nums[j + 1]。
新数组长度 + 1,并且将旧数组的非重复元素赋予新数组。
4.再次重复相同的过程,直到 j 到达数组的末尾为止。

注意点:
1.数组为空判断。
2.遍历时快指针从旧数组下标 1 开始。
3.记录的返回值 i (即新数组的长度)需要 +1,因为新数组的记录从 0 开始,并未记录。

代码:

public class demo27 {
	public static void main(String[] args) {
		int[] nums = {1,2,2,3,3};
		int len = new Solution27().removeElement(nums);
		System.out.println(len);
	}
}
class Solution27 {
    public int removeElement(int[] nums) {
    	int j = 0;
    	// 判断临界条件,数组为空状态
    	if (nums.length == 0) {
    		return 0;
    	}
    	
    	for (int i = 1; i < nums.length; i++) {			// 第 0 位和第 1 位进行比较,故 i 为 1
    		if (nums[j] != nums[i]) {
    			j++;
    			nums[j] = nums[i];
    		}
    	}
    	
    	return j + 1;		// 起始位置第 0 位需要加上
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36847713/article/details/83509086