有序数组
暴力解
var removeDuplicates = function(nums) {
for(let i = 0;i < nums.length; i++){
if(nums[i] == nums[i+1]){
nums.splice(i,1)
i--
}
}
return nums.length
}
思路很简单,循环找到重复元素删除就好了。注意删除后index要减一。
双指针解
var removeDuplicates = function(nums) {
for (var m = 0, n = 0; n < array.length; n++) {
if (array[m] !== array[n]) {
m++
// 如果只是为了返回不重复元素个数 可以不写
array[m] = array[n]
}
}
return m + 1
}
无序数组
额外数组
// 时间复杂度是O(n) 不过创建了新的数组
let array = [2, 3, 1, 5, 7, 3, 7, 9]
let arr = []
array.forEach(element => {
if (arr.indexOf(element) === -1) {
arr.push(element)
}
})
console.log(arr)
原数组上
// 双向for循环,不增加额外数组 T=O(n2)
let array = [2, 3, 1, 5, 7, 3, 7, 9]
let arr = []
for (let i = 0; i < array.length; i++) {
for (let j = i + 1; j < array.length; j++) {
if (array[j] === array[i])
array.splice(j, 1)
}
}
console.log(array)
ES6
Set
// 使用Set
let array = [2, 3, 1, 5, 7, 3, 7, 9]
let arr = []
let set = new Set
array.forEach(element =>
arr = [...set.add(element)]
)
console.log(arr)
Map
// 使用Map
let array = [2, 3, 1, 5, 7, 3, 7, 9]
let arr = []
let map = new Map
array.forEach(element => {
if (!map.has(element)) {
map.set(element, element)
arr.push(element)
}
})
console.log(arr)