Reputation: 69
Why does my solution work in the console but not on leetcode?
var removeDuplicates = function(nums) {
let res = [];
for(let num of nums) {
if(res.includes(num) === false) {
res.push(num);
}
}
return res.length;
};
Console: screenshot
Leetcode:
let arr = [1, 1, 2]
removeDuplicates(arr) // 3
Upvotes: 0
Views: 1922
Reputation: 21
Here is another solution you can try...
var removeDuplicates = function(nums) {
let p1 = 0,lastVal =nums[0] -1;
for (let i = 0; i < nums.length; i++) {
if (nums[i] != lastVal) {
nums[p1] = nums[i];
lastVal = nums[i]
p1 +=1;
}
}
nums.length = p1;
console.log(nums);
};
let arr = [1, 1, 2]
removeDuplicates(arr);
Upvotes: 0
Reputation: 80287
You don't use sortness properly. Algorithmically it is more effective to compare item with previous one, so complexity is O(N)
.
Perhaps JS has some high-order function like Python groupby
to make shorter code, but described method is definitely the best possible from algorithmical point of view.
var removeDuplicates = function(nums) {
let res = [];
let last = NaN
for(i=0; i<nums.length; i++) {
if(nums[i] != last) {
res.push(nums[i]);
last = nums[i];
}
}
return res.length;
};
let arr = [1, 1, 2]
print(removeDuplicates(arr))
>>2
Upvotes: 0
Reputation: 4184
You can try changing includes
to indexOf
, may be includes
is not working in your environment. Also, instead of returning length
you should return res
.
Just in case you want to try another approach, you can look at Sets
like below
var removeDuplicates = function(nums) {
return [...new Set(nums)]
};
console.log(removeDuplicates([1,1,2]))
console.log(removeDuplicates([1,1,2,3]))
Upvotes: 2