Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e191be0

Browse files
Add solution for Remove Duplicates from Sorted Array problem with comprehensive test cases
1 parent ca10736 commit e191be0

File tree

2 files changed

+143
-0
lines changed

2 files changed

+143
-0
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
- https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/description/
2828
- https://leetcode.com/problems/three-consecutive-odds/description/?envType=daily-question&envId=2025年05月11日
2929
- String Problem: https://leetcode.com/problems/is-subsequence/description/
30+
- https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/
3031

3132

3233

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
// https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/
2+
import 'package:test/test.dart';
3+
4+
void main(List<String> args) {
5+
final stopwatch = Stopwatch()..start();
6+
runTests();
7+
8+
stopwatch.stop();
9+
print('Function Execution Time : ${stopwatch.elapsedMicroseconds} micro sec');
10+
}
11+
12+
class Solution {
13+
/// Best Solution from the first time
14+
int removeDuplicates(List<int> nums) {
15+
if (nums.isEmpty) return 0;
16+
if (nums.length == 1) return 1;
17+
18+
int left = 0;
19+
for (int right = 1; right < nums.length; right++) {
20+
if (nums[left] != nums[right]) {
21+
nums[left + 1] = nums[right];
22+
left++;
23+
}
24+
}
25+
26+
/// added 1 becacuse of lenght
27+
return left + 1;
28+
}
29+
}
30+
31+
void runTests() {
32+
final Solution s = Solution();
33+
34+
group('Remove Duplicates from Sorted Array', () {
35+
// Basic examples from problem statement
36+
test('Example 1: [1,1,2] → 2, [1,2]', () {
37+
final nums = [1, 1, 2];
38+
final k = s.removeDuplicates(nums);
39+
expect(k, equals(2));
40+
expect(nums.sublist(0, k), equals([1, 2]));
41+
});
42+
43+
test('Example 2: [0,0,1,1,1,2,2,3,3,4] → 5, [0,1,2,3,4]', () {
44+
final nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4];
45+
final k = s.removeDuplicates(nums);
46+
expect(k, equals(5));
47+
expect(nums.sublist(0, k), equals([0, 1, 2, 3, 4]));
48+
});
49+
50+
// Edge cases
51+
test('Single element array: [5] → 1, [5]', () {
52+
final nums = [5];
53+
final k = s.removeDuplicates(nums);
54+
expect(k, equals(1));
55+
expect(nums.sublist(0, k), equals([5]));
56+
});
57+
58+
test('Empty array: [] → 0, []', () {
59+
final nums = <int>[];
60+
final k = s.removeDuplicates(nums);
61+
expect(k, equals(0));
62+
expect(nums.sublist(0, k), equals([]));
63+
});
64+
65+
// All duplicates
66+
test('All duplicates: [7,7,7] → 1, [7]', () {
67+
final nums = [7, 7, 7];
68+
final k = s.removeDuplicates(nums);
69+
expect(k, equals(1));
70+
expect(nums.sublist(0, k), equals([7]));
71+
});
72+
73+
// No duplicates
74+
test('No duplicates: [1,2,3] → 3, [1,2,3]', () {
75+
final nums = [1, 2, 3];
76+
final k = s.removeDuplicates(nums);
77+
expect(k, equals(3));
78+
expect(nums.sublist(0, k), equals([1, 2, 3]));
79+
});
80+
81+
// Negative numbers
82+
test('Negative numbers: [-2,-2,-1,0,1] → 4, [-2,-1,0,1]', () {
83+
final nums = [-2, -2, -1, 0, 1];
84+
final k = s.removeDuplicates(nums);
85+
expect(k, equals(4));
86+
expect(nums.sublist(0, k), equals([-2, -1, 0, 1]));
87+
});
88+
89+
// Large array
90+
test('Large array with duplicates', () {
91+
final nums = List.generate(30000, (i) => i ~/ 2); // Creates duplicates
92+
final expected = List.generate(15000, (i) => i);
93+
final k = s.removeDuplicates(nums);
94+
expect(k, equals(15000));
95+
expect(nums.sublist(0, k), equals(expected));
96+
});
97+
98+
test('Large array without duplicates', () {
99+
final nums = List.generate(30000, (i) => i);
100+
final expected = List.generate(30000, (i) => i);
101+
final k = s.removeDuplicates(nums);
102+
expect(k, equals(30000));
103+
expect(nums.sublist(0, k), equals(expected));
104+
});
105+
106+
// Mixed cases
107+
test('Mixed duplicates: [1,1,2,3,3,3,4,5,5] → 5, [1,2,3,4,5]', () {
108+
final nums = [1, 1, 2, 3, 3, 3, 4, 5, 5];
109+
final k = s.removeDuplicates(nums);
110+
expect(k, equals(5));
111+
expect(nums.sublist(0, k), equals([1, 2, 3, 4, 5]));
112+
});
113+
114+
// Maximum constraints
115+
test('Maximum length with all unique', () {
116+
final nums = List.generate(30000, (i) => i);
117+
final k = s.removeDuplicates(nums);
118+
expect(k, equals(30000));
119+
});
120+
121+
test('Maximum length with all duplicates', () {
122+
final nums = List.filled(30000, 5);
123+
final k = s.removeDuplicates(nums);
124+
expect(k, equals(1));
125+
});
126+
127+
// Random cases
128+
test('Random case 1: [1,2,2,3,4,4,4,5] → 5, [1,2,3,4,5]', () {
129+
final nums = [1, 2, 2, 3, 4, 4, 4, 5];
130+
final k = s.removeDuplicates(nums);
131+
expect(k, equals(5));
132+
expect(nums.sublist(0, k), equals([1, 2, 3, 4, 5]));
133+
});
134+
135+
test('Random case 2: [0,0,0,1,1,2,2,2,3] → 4, [0,1,2,3]', () {
136+
final nums = [0, 0, 0, 1, 1, 2, 2, 2, 3];
137+
final k = s.removeDuplicates(nums);
138+
expect(k, equals(4));
139+
expect(nums.sublist(0, k), equals([0, 1, 2, 3]));
140+
});
141+
});
142+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /