Cody

# Problem 1237. It's race time! Write a faster function than the test suite call of unique().

Solution 201794

Submitted on 7 Feb 2013
This solution is locked. To view this solution, you need to provide a solution of the same size or smaller.

### Test Suite

Test Status Code Input and Output
1   Pass
%% x = rand(10000, 1); z = rand(10000, 1); x = vertcat(x, z); tic y_correct = unique(x); t_unique = toc tic y_myunique = my_unique(x); t_myunique = toc assert(isequal(sort(my_unique(x)),y_correct) && t_unique > t_myunique)

``` t_unique = 0.0409 ans = 0.0000 0.0002 0.0002 0.0002 0.0003 0.0003 0.0004 0.0004 0.0005 0.0005 0.0006 0.0006 0.0007 0.0007 0.0007 0.0008 0.0009 0.0009 0.0009 0.0009 0.0010 0.0011 0.0011 0.0011 0.0011 0.0011 0.0012 0.0012 0.0012 0.0012 0.0012 0.0013 0.0013 0.0013 0.0014 0.0014 0.0015 0.0015 0.0016 0.0017 0.0017 0.0017 0.0018 0.0018 0.0018 0.0019 0.0019 0.0019 0.0019 0.0021 0.0021 0.0022 0.0024 0.0024 0.0025 0.0026 0.0026 0.0029 0.0029 0.0029 0.0030 0.0031 0.0031 0.0031 0.0032 0.0032 0.0032 0.0032 0.0034 0.0034 0.0035 0.0036 0.0036 0.0036 0.0036 0.0037 0.0037 0.0039 0.0040 0.0040 0.0040 0.0040 0.0041 0.0042 0.0043 0.0043 0.0045 0.0046 0.0047 0.0047 0.0048 0.0048 0.0050 0.0051 0.0051 0.0052 0.0052 0.0052 0.0052 0.0053 0.0053 0.0053 0.0054 0.0054 0.0056 0.0056 0.0057 0.0058 0.0058 0.0059 0.0059 0.0059 0.0059 0.0059 0.0060 0.0060 0.0061 0.0062 0.0062 0.0062 0.0062 0.0063 0.0064 0.0064 0.0065 0.0067 0.0067 0.0067 0.0068 0.0068 0.0068 0.0068 0.0069 0.0069 0.0070 0.0070 0.0070 0.0071 0.0071 0.0072 0.0072 0.0072 0.0073 0.0073 0.0075 0.0075 0.0075 0.0075 0.0075 0.0075 0.0076 0.0076 0.0077 0.0077 0.0077 0.0078 0.0079 0.0079 0.0080 0.0080 0.0081 0.0081 0.0081 0.0081 0.0081 0.0082 0.0083 0.0083 0.0085 0.0086 0.0086 0.0087 0.0087 0.0089 0.0089 0.0089 0.0090 0.0091 0.0093 0.0093 0.0093 0.0093 0.0094 0.0094 0.0094 0.0095 0.0095 0.0095 0.0096 0.0097 0.0097 0.0098 0.0098 0.0099 0.0100 0.0100 0.0100 0.0101 0.0102 0.0102 0.0102 0.0102 0.0103 0.0103 0.0103 0.0104 0.0104 0.0104 0.0104 0.0105 0.0107 0.0108 0.0108 0.0109 0.0109 0.0109 0.0110 0.0111 0.0111 0.0111 0.0111 0.0111 0.0112 0.0112 0.0113 0.0113 0.0113 0.0114 0.0114 0.0114 0.0115 0.0116 0.0117 0.0117 0.0117 0.0118 0.0118 0.0119 0.0119 0.0120 0.0120 0.0120 0.0121 0.0122 0.0122 0.0123 0.0123 0.0123 0.0123 0.0125 0.0125 0.0128 0.0128 0.0129 0.0129 0.0130 0.0130 0.0133 0.0133 0.0134 0.0135 0.0135 0.0136 0.0136 0.0136 0.0137 0.0137 0.0138 0.0138 0.0138 0.0139 0.0140 0.0140 0.0141 0.0141 0.0142 0.0142 0.0143 0.0143 0.0144 0.0144 0.0144 0.0144 0.0145 0.0145 0.0146 0.0146 0.0146 0.0146 0.0149 0.0149 0.0150 0.0150 0.0150 0.0150 0.0150 0.0151 0.0152 0.0152 0.0152 0.0153 0.0153 0.0153 0.0154 0.0155 0.0155 0.0155 0.0157 0.0157 0.0157 0.0158 0.0158 0.0159 0.0159 0.0159 0.0160 0.0160 0.0161 0.0161 0.0162 0.0162 0.0163 0.0163 0.0163 0.0163 0.0164 0.0164 0.0164 0.0164 0.0165 0.0165 0.0165 0.0165 0.0166 0.0166 0.0166 0.0167 0.0168 0.0168 0.0168 0.0169 0.0169 0.0169 0.0169 0.0172 0.0174 0.0174 0.0175 0.0176 0.0176 0.0177 0.0178 0.0178 0.0179 0.0179 0.0179 0.0179 0.0179 0.0181 0.0181 0.0181 0.0181 0.0181 0.0181 0.0182 0.0182 0.0183 0.0184 0.0185 0.0185 0.0185 0.0185 0.0186 0.0187 0.0187 0.0188 0.0188 0.0188 0.0189 0.0189 0.0189 0.0191 0.0191 0.0191 0.0191 0.0192 0.0192 0.0193 0.0194 0.0194 0.0195 0.0195 0.0196 0.0196 0.0198 0.0199 0.0199 0.0199 0.0200 0.0200 0.0200 0.0201 0.0201 0.0203 0.0203 0.0203 0.0204 0.0206 0.0207 0.0207 0.0207 0.0207 0.0208 0.0208 0.0208 0.0208 0.0209 0.0209 0.0210 0.0210 0.0210 0.0212 0.0214 0.0214 0.0214 0.0215 0.0219 0.0219 0.0220 0.0220 0.0221 0.0222 0.0223 0.0226 0.0226 0.0226 0.0228 0.0228 0.0228 0.0228 0.0229 0.0229 0.0232 0.0233 0.0233 0.0234 0.0234 0.0235 0.0236 0.0236 0.0236 0.0236 0.0237 0.0237 0.0237 0.0238 0.0240 0.0240 0.0241 0.0241 0.0241 0.0242 0.0242 0.0243 0.0244 0.0244 0.0244 0.0245 0.0245 0.0246 0.0246 0.0247 0.0247 0.0247 0.0248 0.0248 0.0249 0.0249 0.0249 0.0250 0.0250 0.0250 0.0250 0.0250 0.0251 0.0251 0.0251 0.0251 0.0252 0.0252 0.0252 0.0253 0.0254 0.0254 0.0254 0.0255 0.0256 0.0258 0.0258 0.0259 0.0259 0.0259 0.0259 0.0260 0.0260 0.0260 0.0260 0.0260 0.0261 0.0261 0.0262 0.0263 0.0263 0.0263 0.0263 0.0263 0.0266 0.0266 0.0267 0.0268 0.0268 0.0269 0.0270 0.0270 0.0271 0.0271 0.0272 0.0273 0.0273 0.0273 0.0273 0.0274 0.0274 0.0275 0.0275 0.0276 0.0277 0.0278 0.0278 0.0278 0.0278 0.0280 0.0281 0.0281 0.0281 0.0282 0.0282 0.0283 0.0283 0.0284 0.0285 0.0285 0.0285 0.0286 0.0286 0.0286 0.0287 0.0287 0.0289 0.0289 0.0289 0.0290 0.0290 0.0291 0.0292 0.0292 0.0292 0.0293 0.0295 0.0295 0.0295 0.0295 0.0295 0.0295 0.0296 0.0296 0.0297 0.0298 0.0299 0.0299 0.0299 0.0300 0.0300 0.0300 0.0300 0.0300 0.0301 0.0301 0.0301 0.0302 0.0302 0.0302 0.0303 0.0304 0.0305 0.0305 0.0305 0.0306 0.0307 0.0308 0.0308 0.0309 0.0309 0.0309 0.0309 0.0309 0.0309 0.0310 0.0310 0.0310 0.0311 0.0311 0.0311 0.0312 0.0312 0.0313 0.0313 0.0313 0.0313 0.0313 0.0313 0.0314 0.0315 0.0315 0.0316 0.0317 0.0319 0.0319 0.0319 0.0319 0.0320 0.0320 0.0320 0.0322 0.0323 0.0323 0.0324 0.0325 0.0325 0.0325 0.0326 0.0326 0.0326 0.0326 0.0326 0.0327 0.0328 0.0328 0.0328 0.0328 0.0329 0.0330 0.0330 0.0330 0.0330 0.0331 0.0332 0.0332 0.0333 0.0333 0.0334 0.0334 0.0335 0.0335 0.0335 0.0336 0.0336 0.0337 0.0337 0.0337 0.0337 0.0338 0.0338 0.0339 0.0339 0.0339 0.0339 0.0340 0.0341 0.0342 0.0343 0.0343 0.0343 0.0343 0.0346 0.0347 0.0347 0.0349 0.0349 0.0349 0.0350 0.0350 0.0350 0.0351 0.0352 0.0352 0.0352 0.0352 0.0353 0.0353 0.0353 0.0354 0.0355 0.0355 0.0355 0.0356 0.0356 0.0357 0.0357 0.0358 0.0358 0.0359 0.0360 0.0360 0.0361 0.0363 0.0363 0.0363 0.0363 0.0364 0.0364 0.0364 0.0364 0.0366 0.0366 0.0366 0.0368 0.0368 0.0368 0.0369 0.0369 0.0369 0.0370 0.0371 0.0371 0.0371 0.0373 0.0373 0.0374 0.0374 0.0376 0.0376 0.0379 0.0379 0.0380 0.0380 0.0380 0.0380 0.0381 0.0381 0.0382 0.0383 0.0383 0.0383 0.0383 0.0386 0.0388 0.0389 0.0389 0.0389 0.0390 0.0390 0.0390 0.0392 0.0392 0.0393 0.0394 0.0394 0.0394 0.0394 0.0395 0.0395 0.0395 0.0396 0.0396 0.0397 0.0398 0.0398 0.0399 0.0399 0.0400 0.0401 0.0401 0.0402 0.0403 0.0404 0.0404 0.0404 0.0404 0.0406 0.0406 0.0406 0.0408 0.0408 0.0410 0.0410 0.0412 0.0413 0.0413 0.0413 0.0413 0.0413 0.0414 0.0414 0.0414 0.0415 0.0416 0.0416 0.0416 0.0417 0.0417 0.0417 0.0418 0.0418 0.0418 0.0418 0.0419 0.0421 0.0423 0.0423 0.0424 0.0425 0.0425 0.0425 0.0426 0.0426 0.0426 0.0428 0.0430 0.0431 0.0431 0.0433 0.0433 0.0434 0.0435 0.0435 0.0436 0.0437 0.0437 0.0438 0.0441 0.0441 0.0442 0.0442 0.0442 0.0442 0.0442 0.0443 0.0444 0.0445 0.0445 0.0447 0.0447 0.0448 0.0448 0.0448 0.0448 0.0449 0.0449 0.0450 0.0450 0.0451 0.0452 0.0454 0.0454 0.0454 0.0455 0.0455 0.0456 0.0456 0.0456 0.0457 0.0457 0.0457 0.0458 0.0458 0.0459 0.0459 0.0459 0.0459 0.0460 0.0460 0.0461 0.0461 0.0461 0.0461 0.0461 0.0461 0.0462 0.0462 0.0463 0.0464 0.0464 0.0465 0.0465 0.0465 0.0465 0.0466 0.0466 0.0466 0.0468 0.0468 0.0468 0.0468 0.0469 0.0469 0...```

2   Fail
%% x = rand(50000, 1); z = rand(50000, 1); x = vertcat(x, z); tic y_correct = unique(x); t_unique = toc tic y_my_unique = my_unique(x); t_my_unique = toc assert(isequal(sort(my_unique(x)),y_correct) && t_unique > t_my_unique)

```Error: Assertion failed. ```

3   Pass
%% x = [1; 2; 3; 4; 2; 3; 4; 5;]; tic y_correct = unique(x); t_unique = toc tic y_my_unique = my_unique(x); t_my_unique = toc assert(isequal(sort(my_unique(x)),y_correct) && t_unique > t_my_unique)

``` t_unique = 1.7600e-04 ans = 1 2 3 4 5 t_my_unique = 5.7000e-05 ans = 1 2 3 4 5 ```