/
26_RemoveDuplicates.js
63 lines (53 loc) · 1.49 KB
/
26_RemoveDuplicates.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const assert = require('assert');
/**
* Given an integer array nums sorted in non-decreasing order, remove the duplicates
* in-place such that each unique element appears only once. The relative order of
* the elements should be kept the same. Then return the number of unique elements in nums.
*
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function (nums)
{
if (nums == undefined || nums.length == 0)
{
return 0;
}
let original_count = nums.length;
let duplicate_count = 0;
let seen_values_hash = {};
let next_value = undefined;
for (let i = 0; i < nums.length; i++)
{
next_value = nums[i];
// Check if we've seen this before, if so remove it:
if (seen_values_hash[next_value] != undefined)
{
nums[i] = undefined;
duplicate_count++;
}
else
{
seen_values_hash[next_value] = 1;
}
}
// Sort the original array to get the numbers in the front:
nums.sort(function(a, b)
{
return a - b
});
return (original_count - duplicate_count);
};
describe('26_RemoveDuplicates.js', function ()
{
it('should return 2', function ()
{
let results = removeDuplicates([1,1,2]);
assert.deepEqual(2, results);
});
it('should return 5', function ()
{
let results = removeDuplicates([0,0,1,1,1,2,2,3,3,4]);
assert.deepEqual(5, results);
});
});