annieg4123
annieg4123

Reputation: 69

Leetcode: Remove duplicates from sorted array (Javascript)

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

Answers (3)

Jayram Manale
Jayram Manale

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);

Click here to RUN

Upvotes: 0

MBo
MBo

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.

ideone

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

Nitish Narang
Nitish Narang

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

Related Questions