Skip to content

Latest commit

 

History

History

026.RemoveDuplicatesFromSortedArray

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

代码实现

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 = 1k = 0
  • nums[4]等于3,和nums[k]不相等,所以进入第一个ifnums[1] = 3i = 2k = 1
  • nums[5]又是3,同步骤二一样,什么也不做。
  • nums[6]等于4,同步骤三一样,得到nums[2] = 4i = 3k = 2

所以,最后得到数组[2, 3, 4, 2, 3, 3, 4],然后根据i切分数组:

if (i !== -1) {
  nums.splice(i)
}

就得到了数组[2, 3, 4],其中所有元素都不重复。