026.RemoveDuplicatesFromSortedArray
首先,空数组和长度为1的数组肯定是不重复的,只有长度大于1的数组才有可能重复,因此需要先进行判断:
if (nums.length > 1) {
}
然后判断元素是否重复,如果重复了,就用后面的值填充它:
for (let j = 1, k = 0; j < nums.length; j++) {
if (nums[j] !== nums[k]) {
if (i !== -1) {
nums[i++] = nums[j]
}
k++
} else if (i === -1) {
i = j
}
}
举个例子,数组[2, 2, 2, 2, 3, 3, 4]
:
- 首先,判断
nums[1]
和nums[0]
相等,于是得到i = 1
。 - 其次,
nums[2]
、nums[3]
都和nums[0]
相等,但是上一步得到i = 1
,所以这次不进入if
语句,此时仍然i = 1
、k = 0
。 nums[4]
等于3,和nums[k]
不相等,所以进入第一个if
,nums[1] = 3
、i = 2
、k = 1
。nums[5]
又是3,同步骤二一样,什么也不做。nums[6]
等于4,同步骤三一样,得到nums[2] = 4
、i = 3
、k = 2
。
所以,最后得到数组[2, 3, 4, 2, 3, 3, 4]
,然后根据i
切分数组:
if (i !== -1) {
nums.splice(i)
}
就得到了数组[2, 3, 4]
,其中所有元素都不重复。