Skip to content

Latest commit

 

History

History
80 lines (58 loc) · 1.78 KB

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

File metadata and controls

80 lines (58 loc) · 1.78 KB

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

url

题目

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

给定数组 nums = [1,1,2],

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

你不需要考虑数组中超出新长度后面的元素。

方法

双指针,其实就是一个指针固定第一个元素上,第二个指针遍历数组。

  • 比如,1,2,2。 用一个变量p在1元素上的索引,另一个变量i在元素2的索引上
  • 将索引i的元素和索引p的索引上的元素进行比较
  • 如果元素不相同,就将p索引+1,并之后将索引i的元素转移到索引p的位置上
  • 如果相同,就i依然跟着数组遍历

code

js

let removeDuplicates = nums => {
    let p = 0;
    for (let i = 1; i < nums.length; i++) {
        if (nums[i] !== nums[p]) {
            nums[++p] = nums[i];
        }
    }
    console.log(nums);
    return p + 1;
}

console.log(removeDuplicates([1, 1, 2]));

go

func removeDuplicates(nums []int) int {
	// 单指针
	p := 0
	for i := 1; i < len(nums); i++ {
		if nums[i] != nums[p] {
			p += 1
			nums[p] = nums[i]
		}
	}
	return p + 1
}

java

class Solution {
    public int removeDuplicates(int[] nums) {
        // 单指针
        int p = 0;
        for(int i = 1; i < nums.length; i++){
            if (nums[i] != nums[p]) {
                nums[++p] = nums[i];
            }
        }
        return p + 1;
    }
}