2
2
using System ;
3
3
using System . Collections . Generic ;
4
4
using System . Linq ;
5
- using System . Text ;
6
5
7
6
namespace CodingInterview
8
7
{
9
8
public class Tests
10
9
{
11
- int [ ] RemoveDuplicates ( int [ ] arrayOfNumbers )
10
+ private static int [ ] RemoveDuplicates ( IReadOnlyList < int > arrayOfNumbers )
12
11
{
13
12
var numbers = new HashSet < int > ( ) ;
14
- for ( int index = 0 ; index < arrayOfNumbers . Length ; index ++ )
13
+ foreach ( var element in arrayOfNumbers )
15
14
{
16
- numbers . Add ( arrayOfNumbers [ index ] ) ;
15
+ numbers . Add ( element ) ;
17
16
}
18
17
return numbers . ToArray ( ) ;
19
18
}
20
19
21
- int [ ] LeaveTwoDuplicates ( int [ ] arrayOfNumbers )
20
+ private static int [ ] LeaveTwoDuplicates ( IReadOnlyCollection < int > arrayOfNumbers )
22
21
{
23
22
var numbers = new HashSet < int > ( ) ;
24
23
var numbersWithTwoDuplicates = new List < int > ( ) ;
25
- for ( int index = 0 ; index < arrayOfNumbers . Length ; index ++ )
24
+ foreach ( var element in arrayOfNumbers )
26
25
{
27
- numbers . Add ( arrayOfNumbers [ index ] ) ;
26
+ numbers . Add ( element ) ;
28
27
}
29
28
30
- for ( int index = 0 ; index < numbers . Count ; index ++ )
29
+ for ( var index = 0 ; index < numbers . Count ; index ++ )
31
30
{
32
31
var actualValue = numbers . ElementAt ( index ) ;
33
- if ( arrayOfNumbers . Where ( element => element == actualValue ) . Count ( ) >= 2 )
32
+ if ( arrayOfNumbers . Count ( element => element == actualValue ) >= 2 )
34
33
{
35
34
numbersWithTwoDuplicates . Add ( actualValue ) ;
36
35
}
@@ -39,20 +38,19 @@ int[] LeaveTwoDuplicates(int[] arrayOfNumbers)
39
38
return numbersWithTwoDuplicates . ToArray ( ) ;
40
39
}
41
40
42
- int [ ] RemoveElement ( int [ ] arrayOfNumbers , int elementToRemove )
41
+ private static int [ ] RemoveElement ( IReadOnlyCollection < int > arrayOfNumbers , int elementToRemove )
43
42
{
44
43
return arrayOfNumbers
45
44
. Where ( element => element != elementToRemove )
46
45
. ToArray ( ) ;
47
46
}
48
47
49
- int [ ] MoveZeros ( int [ ] arrayOfNumbers )
48
+ private static int [ ] MoveZeros ( IReadOnlyList < int > arrayOfNumbers )
50
49
{
51
50
var zeroCount = 0 ;
52
51
var listOfElements = new List < int > ( ) ;
53
- for ( int index = 0 ; index < arrayOfNumbers . Length ; index ++ )
52
+ foreach ( var actualElement in arrayOfNumbers )
54
53
{
55
- var actualElement = arrayOfNumbers [ index ] ;
56
54
if ( actualElement == 0 )
57
55
{
58
56
zeroCount ++ ;
@@ -68,28 +66,25 @@ int[] MoveZeros(int[] arrayOfNumbers)
68
66
return listOfElements . ToArray ( ) ;
69
67
}
70
68
71
- int [ ] GetProductofArrayExceptSelf ( int [ ] inputArray )
69
+ private static int [ ] GetProductofArrayExceptSelf ( IReadOnlyList < int > inputArray )
72
70
{
73
- if ( inputArray == null || inputArray . Length == 0 )
71
+ if ( inputArray == null || inputArray . Count == 0 )
74
72
throw new ArgumentNullException ( "inputArray needs to have elements" ) ;
75
- var outputArray = new List < int > ( ) ;
76
- for ( int index = 0 ; index < inputArray . Length ; index ++ )
77
- {
78
- outputArray . Add ( inputArray
79
- . Where ( element => element != inputArray [ index ] )
80
- . Aggregate ( ( firstElement , secondElement ) => firstElement * secondElement ) ) ;
81
- }
82
- return outputArray . ToArray ( ) ;
73
+
74
+ return inputArray
75
+ . Select ( arrayElement => inputArray . Where ( element => element != arrayElement )
76
+ . Aggregate ( ( firstElement , secondElement ) => firstElement * secondElement ) )
77
+ . ToArray ( ) ;
83
78
}
84
79
85
- int [ ] GetMinimumSizeSubarraySum ( int [ ] inputArray , int n )
80
+ private static int [ ] GetMinimumSizeSubarraySum ( IReadOnlyList < int > inputArray , int n )
86
81
{
87
82
var listOfSums = new List < int > ( ) ;
88
83
var listOfNumbers = new List < int > ( ) ;
89
84
var sum = 0 ;
90
- for ( int subArraySize = 2 ; subArraySize <= inputArray . Length - 1 ; subArraySize ++ )
85
+ for ( var subArraySize = 2 ; subArraySize <= inputArray . Count - 1 ; subArraySize ++ )
91
86
{
92
- for ( int index = 0 ; index <= inputArray . Length - 1 ; index ++ )
87
+ for ( var index = 0 ; index <= inputArray . Count - 1 ; index ++ )
93
88
{
94
89
sum += inputArray [ index ] ;
95
90
listOfNumbers . Add ( inputArray [ index ] ) ;
@@ -104,39 +99,38 @@ int[] GetMinimumSizeSubarraySum(int[] inputArray, int n)
104
99
listOfSums . Add ( sum ) ;
105
100
sum = 0 ;
106
101
listOfNumbers . Clear ( ) ;
107
- continue ;
108
102
}
109
103
}
110
104
}
111
105
return null ;
112
106
}
113
107
114
- string [ ] GetSummaryRanges ( int [ ] inputArray )
108
+ private static string [ ] GetSummaryRanges ( int [ ] inputArray )
115
109
{
116
110
if ( inputArray == null || inputArray . Length == 0 )
117
111
throw new ArgumentNullException ( "inputArray needs to have elements" ) ;
118
112
119
113
var listOfAnswers = new List < string > ( ) ;
120
114
121
- for ( int index = 0 ; index < inputArray . Length ; index ++ )
115
+ for ( var index = 0 ; index < inputArray . Length ; index ++ )
122
116
{
123
117
var firstString = string . Empty ;
124
- bool found = false ;
125
- for ( int insideIndex = index ; insideIndex < inputArray . Length ; insideIndex ++ )
118
+ var isFounded = false ;
119
+ for ( var insideIndex = index ; insideIndex < inputArray . Length ; insideIndex ++ )
126
120
{
127
121
if ( insideIndex + 1 < inputArray . Length && ( inputArray [ insideIndex + 1 ] - inputArray [ insideIndex ] == 1 ) )
128
122
{
129
- if ( ! found )
123
+ if ( ! isFounded )
130
124
{
131
125
firstString = $ "{ inputArray [ insideIndex ] } ";
132
126
}
133
- found = true ;
127
+ isFounded = true ;
134
128
}
135
129
else
136
130
{
137
- if ( found )
131
+ if ( isFounded )
138
132
{
139
- string endString = inputArray [ insideIndex ] . ToString ( ) ;
133
+ var endString = inputArray [ insideIndex ] . ToString ( ) ;
140
134
listOfAnswers . Add ( $ "{ firstString } ->{ endString } ") ;
141
135
index = insideIndex ;
142
136
break ;
@@ -151,43 +145,26 @@ string[] GetSummaryRanges(int[] inputArray)
151
145
return listOfAnswers . ToArray ( ) ;
152
146
}
153
147
154
- string [ ] GetMissingRanges ( int lower , int upper , int [ ] inputArray )
148
+ private static string [ ] GetMissingRanges ( int lower , int upper , IReadOnlyCollection < int > inputArray )
155
149
{
156
- if ( inputArray == null || inputArray . Length == 0 )
150
+ if ( inputArray == null || inputArray . Count == 0 )
157
151
throw new ArgumentNullException ( "InputArray needs to have elements" ) ;
158
152
159
153
if ( lower > upper && lower >= 0 && upper >= 0 )
160
154
throw new ArgumentException ( "Correct arguments" ) ;
161
155
162
156
var negativeList = Enumerable . Range ( lower , upper - lower + 1 )
163
- . Where ( element => ! inputArray . Any ( item => item = = element ) ) ;
157
+ . Where ( element => inputArray . All ( item => item ! = element ) ) ;
164
158
165
159
return GetSummaryRanges ( negativeList . ToArray ( ) ) ;
166
160
}
167
161
168
- int [ ] [ ] GetMergeIntervals ( int [ ] [ ] inputArray )
162
+ private static int [ ] [ ] GetMergeIntervals ( )
169
163
{
170
- //given
171
- //var inputArray = new int[][] {
172
- // new int[] { 1, 3 },
173
- // new int[] { 2, 6 },
174
- // new int[] { 8, 10 },
175
- // new int[] { 15, 18 }
176
- //};
177
- //var expectedArray = new int[][] {
178
- // new int[] { 1, 6 },
179
- // new int[] { 8, 10 },
180
- // new int[] { 15, 18 }
181
- //};
182
-
183
- for ( var index = 1 ; index < inputArray . Length ; index += 2 )
184
- {
185
-
186
- }
187
- return inputArray ;
164
+ return null ;
188
165
}
189
166
190
- public bool CheckIfStringIsPalindrome ( string message )
167
+ private static bool CheckIfStringIsPalindrome ( string message )
191
168
{
192
169
if ( string . IsNullOrEmpty ( message ) )
193
170
return false ;
@@ -205,16 +182,16 @@ public bool CheckIfStringIsPalindrome(string message)
205
182
private static string GetAlphabeticString ( string message )
206
183
{
207
184
var alphabeticMessageArray = message . ToCharArray ( ) . Where ( element => ( element >= 'a' && element <= 'z' ) || ( element >= 'A' && element <= 'Z' ) ) ;
208
- string alphabeticMessageString = string . Join ( "" , alphabeticMessageArray ) . ToLower ( ) ;
185
+ var alphabeticMessageString = string . Join ( "" , alphabeticMessageArray ) . ToLower ( ) ;
209
186
return alphabeticMessageString ;
210
187
}
211
188
212
189
[ Test ]
213
190
public void RemoveDuplicatesFromSortedArray_1 ( )
214
191
{
215
192
//given
216
- var sortedArrayWithDuplicates = new int [ ] { 1 , 3 , 3 , 6 , 8 , 8 , 9 } ;
217
- var expectedSortedArrayWithoutDuplicates = new int [ ] { 1 , 3 , 6 , 8 , 9 } ;
193
+ var sortedArrayWithDuplicates = new [ ] { 1 , 3 , 3 , 6 , 8 , 8 , 9 } ;
194
+ var expectedSortedArrayWithoutDuplicates = new [ ] { 1 , 3 , 6 , 8 , 9 } ;
218
195
//when
219
196
var sortedArrayWithoutDuplicatesCalculated = RemoveDuplicates ( sortedArrayWithDuplicates ) ;
220
197
//then
@@ -225,8 +202,8 @@ public void RemoveDuplicatesFromSortedArray_1()
225
202
public void RemoveDuplicatesFromSortedArray_2 ( )
226
203
{
227
204
//given
228
- var sortedArrayWithDuplicates = new int [ ] { 1 , 3 , 3 , 3 , 6 , 8 , 8 , 9 , 9 , 9 } ;
229
- var expectedSortedArrayWithTwoDuplicates = new int [ ] { 1 , 3 , 3 , 6 , 8 , 8 , 9 , 9 } ;
205
+ var sortedArrayWithDuplicates = new [ ] { 1 , 3 , 3 , 3 , 6 , 8 , 8 , 9 , 9 , 9 } ;
206
+ var expectedSortedArrayWithTwoDuplicates = new [ ] { 1 , 3 , 3 , 6 , 8 , 8 , 9 , 9 } ;
230
207
//when
231
208
var sortedArrayWithTwoDuplicatesCalculated = LeaveTwoDuplicates ( sortedArrayWithDuplicates ) ;
232
209
//then
@@ -237,8 +214,8 @@ public void RemoveDuplicatesFromSortedArray_2()
237
214
public void RemoveElement_3 ( )
238
215
{
239
216
//given
240
- var arrayWithElements = new int [ ] { 1 , 5 , 3 , 3 , 6 , 1 , 8 , 3 , 9 , 7 } ;
241
- var expectedArrayWithElements = new int [ ] { 1 , 5 , 6 , 1 , 8 , 9 , 7 } ;
217
+ var arrayWithElements = new [ ] { 1 , 5 , 3 , 3 , 6 , 1 , 8 , 3 , 9 , 7 } ;
218
+ var expectedArrayWithElements = new [ ] { 1 , 5 , 6 , 1 , 8 , 9 , 7 } ;
242
219
var elementToRemove = 3 ;
243
220
//when
244
221
var arrayWithRemoveElement = RemoveElement ( arrayWithElements , elementToRemove ) ;
@@ -250,8 +227,8 @@ public void RemoveElement_3()
250
227
public void MoveZeros_4 ( )
251
228
{
252
229
//given
253
- var arrayWithZeros = new int [ ] { 1 , 0 , 5 , 0 , 0 , 3 } ;
254
- var expectedArrayWithZerosInTheEnd = new int [ ] { 1 , 5 , 3 , 0 , 0 , 0 } ;
230
+ var arrayWithZeros = new [ ] { 1 , 0 , 5 , 0 , 0 , 3 } ;
231
+ var expectedArrayWithZerosInTheEnd = new [ ] { 1 , 5 , 3 , 0 , 0 , 0 } ;
255
232
//when
256
233
var arrayWithRemoveElement = MoveZeros ( arrayWithZeros ) ;
257
234
//then
@@ -262,8 +239,8 @@ public void MoveZeros_4()
262
239
public void ProductofArrayExceptSelf_7 ( )
263
240
{
264
241
//given
265
- var inputArray = new int [ ] { 1 , 2 , 3 , 4 } ;
266
- var expectedArray = new int [ ] { 24 , 12 , 8 , 6 } ;
242
+ var inputArray = new [ ] { 1 , 2 , 3 , 4 } ;
243
+ var expectedArray = new [ ] { 24 , 12 , 8 , 6 } ;
267
244
//when
268
245
var outputArray = GetProductofArrayExceptSelf ( inputArray ) ;
269
246
//then
@@ -274,9 +251,9 @@ public void ProductofArrayExceptSelf_7()
274
251
public void MinimumSizeSubarraySum_8 ( )
275
252
{
276
253
//given
277
- var inputArray = new int [ ] { 2 , 3 , 1 , 2 , 4 , 3 } ;
254
+ var inputArray = new [ ] { 2 , 3 , 1 , 2 , 4 , 3 } ;
278
255
int n = 7 ;
279
- var expectedArray = new int [ ] { 4 , 3 } ;
256
+ var expectedArray = new [ ] { 4 , 3 } ;
280
257
//when
281
258
var outputArray = GetMinimumSizeSubarraySum ( inputArray , n ) ;
282
259
//then
@@ -287,8 +264,8 @@ public void MinimumSizeSubarraySum_8()
287
264
public void SummaryRanges_9 ( )
288
265
{
289
266
//given
290
- var inputArray = new int [ ] { 0 , 1 , 2 , 4 , 5 , 7 } ;
291
- var expectedArray = new string [ ] { "0->2" , "4->5" , "7" } ;
267
+ var inputArray = new [ ] { 0 , 1 , 2 , 4 , 5 , 7 } ;
268
+ var expectedArray = new [ ] { "0->2" , "4->5" , "7" } ;
292
269
//when
293
270
var outputArray = GetSummaryRanges ( inputArray ) ;
294
271
//then
@@ -299,10 +276,10 @@ public void SummaryRanges_9()
299
276
public void MissingRanges_10 ( )
300
277
{
301
278
//given
302
- var inputArray = new int [ ] { 0 , 1 , 3 , 50 , 75 } ;
279
+ var inputArray = new [ ] { 0 , 1 , 3 , 50 , 75 } ;
303
280
int lower = 0 ;
304
281
int upper = 99 ;
305
- var expectedArray = new string [ ] { "2" , "4->49" , "51->74" , "76->99" } ;
282
+ var expectedArray = new [ ] { "2" , "4->49" , "51->74" , "76->99" } ;
306
283
//when
307
284
var outputArray = GetMissingRanges ( lower , upper , inputArray ) ;
308
285
//then
@@ -313,19 +290,21 @@ public void MissingRanges_10()
313
290
public void MergeIntervals_11 ( )
314
291
{
315
292
//given
316
- var inputArray = new int [ ] [ ] {
317
- new int [ ] { 1 , 3 } ,
318
- new int [ ] { 2 , 6 } ,
319
- new int [ ] { 8 , 10 } ,
320
- new int [ ] { 15 , 18 }
293
+ var inputArray = new [ ]
294
+ {
295
+ new [ ] { 1 , 3 } ,
296
+ new [ ] { 2 , 6 } ,
297
+ new [ ] { 8 , 10 } ,
298
+ new [ ] { 15 , 18 }
321
299
} ;
322
- var expectedArray = new int [ ] [ ] {
323
- new int [ ] { 1 , 6 } ,
324
- new int [ ] { 8 , 10 } ,
325
- new int [ ] { 15 , 18 }
300
+ var expectedArray = new [ ]
301
+ {
302
+ new [ ] { 1 , 6 } ,
303
+ new [ ] { 8 , 10 } ,
304
+ new [ ] { 15 , 18 }
326
305
} ;
327
306
//when
328
- var outputArray = GetMergeIntervals ( inputArray ) ;
307
+ var outputArray = GetMergeIntervals ( ) ;
329
308
//then
330
309
Assert . AreEqual ( expectedArray , outputArray ) ;
331
310
}
0 commit comments