94
94
*/
95
95
public class FlatlandSpaceStations {
96
96
public static int flatlandSpaceStations (int noOfCities , int [] spaceStations ){
97
- int noSpaceStations = spaceStations .length ;
97
+ int noOfSpaceStations = spaceStations .length ;
98
98
99
- if (noOfCities == noSpaceStations ) return 0 ;
99
+ if (noOfCities == noOfSpaceStations ) return 0 ;
100
100
// if ( noOfCities == 1 && noSpaceStations == 1 ) return 0;
101
- else if ( noOfCities == 2 && noSpaceStations == 1 ) return 1 ;
101
+ else if ( noOfCities == 2 && noOfSpaceStations == 1 ) return 1 ;
102
102
// else if ( noOfCities == 2 && noSpaceStations == 2 ) return 0;
103
- else if ( noOfCities == 3 && noSpaceStations == 2 ) return 1 ;
103
+ else if ( noOfCities == 3 && noOfSpaceStations == 2 ) return 1 ;
104
104
105
105
106
- if ( noSpaceStations == 1 ) {
106
+ if ( noOfSpaceStations == 1 ) {
107
107
int firstSpaceStation = spaceStations [0 ];
108
108
109
109
if ( noOfCities == 3 )
110
110
return Math .max (firstSpaceStation , noOfCities -firstSpaceStation -1 );
111
111
112
- else if ( firstSpaceStation == noSpaceStations -1 || noSpaceStations == 3 )
112
+ else if ( firstSpaceStation == noOfSpaceStations -1 || noOfSpaceStations == 3 )
113
113
return Math .max (firstSpaceStation -1 , noOfCities -firstSpaceStation -1 );
114
114
115
115
else
@@ -122,18 +122,47 @@ else if ( firstSpaceStation == noSpaceStations-1 || noSpaceStations == 3 )
122
122
123
123
int maxDistance = 0 ;
124
124
int i =0 ;
125
- for (; i <noSpaceStations -1 ; i ++){
126
- int distanceDiff = spaceStations [i +1 ]-spaceStations [i ];
127
125
128
- if ( maxDistance < distanceDiff )
129
- maxDistance = distanceDiff ;
130
- }
126
+ // for(; i<noSpaceStations-1; i++) {
131
127
132
- if (spaceStations [i ] < noSpaceStations ) {
133
- int distanceFromLast = noOfCities -1 -spaceStations [i ];
128
+ //check if the space station are consecutive last
129
+ // if (spaceStations[i] == noSpaceStations-2)
130
+ //
131
+ //
132
+ // int distanceDiff = spaceStations[i+1]-spaceStations[i];
133
+ //
134
+ // if ( maxDistance < distanceDiff)
135
+ // maxDistance = distanceDiff;
136
+ // }
134
137
135
- if (maxDistance < distanceFromLast )
136
- return distanceFromLast ;
138
+ // if (spaceStations[i] < noSpaceStations) {
139
+ // int distanceFromLast = noOfCities-1-spaceStations[i];
140
+ //
141
+ // if (maxDistance < distanceFromLast)
142
+ // return distanceFromLast;
143
+ // }
144
+
145
+ // lets get the distance from the first city
146
+ // to first space station
147
+ int j =0 ;
148
+ while ( j < noOfCities -1 ) {
149
+ // if space station is ahead of city
150
+ if ( spaceStations [i ] > j ) {
151
+ maxDistance = spaceStations [i ] - j ;
152
+
153
+ // suppose next city is next to space station
154
+ // it should not be a consecutive space station
155
+ // if it is, increment the index until next
156
+ // city is found.
157
+ j = spaceStations [i ]+1 ;
158
+ for ( int k =j ; k < noOfSpaceStations -1 ; k ++ ){
159
+
160
+ if ( k != spaceStations [k ]){
161
+ j = k ;
162
+ break ;
163
+ }
164
+ }
165
+ } else j ++;
137
166
}
138
167
139
168
return maxDistance ;
@@ -168,6 +197,18 @@ void hasFourCitiesTwoStationsAtThirdAndFourth() {
168
197
169
198
Assertions .assertEquals (expectedMaxDistance ,
170
199
FlatlandSpaceStations .flatlandSpaceStations (noOfCities , spaceStaions ));
200
+
201
+ /**
202
+ * Assertion Fail.
203
+ * Expected :2
204
+ * Actual :1
205
+ *
206
+ * The logic to get the maximum distance fails.
207
+ * As the stations are in the end, we have to
208
+ * get the distance from the first city to that
209
+ * station.
210
+ *
211
+ */
171
212
}
172
213
173
214
@ Test
0 commit comments