Contains and removing duplicates in arrays

Michael Horowitz
3 min readMar 15, 2021

The problems read as follows, for contains duplicates:

Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.

Example 1:

Input: nums = [1,2,3,1]
Output: true

Example 2:

Input: nums = [1,2,3,4]
Output: false

Example 3:

Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true

Constraints:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109

And for remove duplicates:

Given a sorted array (nums), remove the duplicates in-place such that each element appears only once and returns the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means a modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);
// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
print(nums[i]);
}

Example 1:

Input: nums = [1,1,2]
Output: 2, nums = [1,2]
Explanation: Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn't matter what you leave beyond the returned length.

Example 2:

Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4]
Explanation: Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively. It doesn't matter what values are set beyond the returned length.

Constraints:

  • 0 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums is sorted in ascending order.

Steps for solving contains duplicates are as follows.

create an empty object, loop through the array(nums), check if the number exists in the object,
if exists return true
else
set the as a key with a value of 1
continue until end
return false

As well as my code for solving

const containsDuplicate = (nums) => {
let obj = {}

for (let i = 0; i < nums.length; i++) {
if (obj.hasOwnProperty(nums[i])) {
return true
} else {
obj[nums[i]] = 1
}
}
return false;
};

Steps for solving remove duplicates are as follows.

First, to write off edge case if the length of the array is less than or equal to 1 then just return the length it’s either going to be 0 or 1 so it doesn't matter at that point,

Then we have two points in the array and while the second is still within the array,

And while the second point is the same as the first we take out the second point,

And both points go up one index,

Then after the whole loop, we return the length of the array.

My code for solving remove duplicates is as follows:

const removeDuplicates = (nums) => {if (nums.length <= 1) return nums.length;let p1 = 0;let p2 = 1; while (p2 in nums) {     while (nums[p2] === nums[p1]) nums.splice(p2, 1);     p1++;     p2++;}return nums.length;};

--

--