🎀 The Problem
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.
Example:
Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,,,,,_]
👩💻 My Answer
class Solution {
public int removeDuplicates(int[] nums) {
int index = 0;
int current = nums[0];
boolean check = false;
for (int i = 1; i < nums.length; i++) {
int next = nums[i];
if (check == false && current == next) {
index++;
check = true;
} else if (check == true && current < next) {
nums[index] = next;
current = next;
index++;
} else if (check == false && current < next) {
index++;
current = next;
}
}
if (check == false)
index++;
return index;
}
}
Pro & Con
- 🔺 Runtime & Memory
- ✖️ Too long
💋 Ideal Answer
Approach - "Two Pointer"
I redid this problem using the "Two Pointer" approach on my own.
New Code
class Solution {
public int removeDuplicates(int[] nums) {
int index = 0;
int current = 1;
while (current < nums.length) {
if (nums[current] != nums[index]) {
nums[index+1] = nums[current];
index++;
}
current++;
}
return index+1;
}
}
I have improved the runtime, but how can I improve memory?
💡 What I Learned
- I think I mastered the "Two Pointers" method.
Top comments (0)