1200.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. # 1200. Minimum Absolute Difference
  3. # Failed
  4. class Solution {
  5. /**
  6. * @param Integer[] $arr
  7. * @return Integer[][]
  8. */
  9. function minimumAbsDifference($arr) {
  10. $abs_arr = array_map('abs', $arr);
  11. asort($abs_arr);
  12. $abs_arr_keys = array_keys($abs_arr);
  13. $matchs = [];
  14. $min_diff = 99999999999;
  15. $limit = count($abs_arr) - 1;
  16. $f = current($abs_arr);
  17. for ( $i = 0; $i < $limit; ++$i) {
  18. $s = next($abs_arr);
  19. $diff = $s - $f;
  20. $f = $s;
  21. $fo = $arr[$abs_arr_keys[$i]];
  22. $so = $arr[$abs_arr_keys[$i+1]];
  23. if ( $fo >= $so ) { continue; }
  24. if ( $diff < $min_diff ) { $min_diff = $diff; }
  25. if ( ! array_key_exists($diff, $matchs) ) {
  26. $matchs[$diff] = [[$i, $i+1]]; continue;
  27. }
  28. array_push($matchs[$diff], [$i, $i+1]);
  29. }
  30. $res = [];
  31. foreach ( $matchs[$min_diff] as $t ) {
  32. $f = $arr[$abs_arr_keys[$t[0]]];
  33. $s = $arr[$abs_arr_keys[$t[1]]];
  34. array_push($res, [$f, $s]);
  35. }
  36. return $res;
  37. }
  38. }
  39. function main() {
  40. function r($a, $exp) {
  41. $S = new Solution;
  42. $r = $S->minimumAbsDifference($a);
  43. $str_a = json_encode($a);
  44. $str_r = json_encode($r);
  45. $str_exp = json_encode($exp);
  46. echo "Solution().minimumAbsDifference(\"$str_a\") = $str_r | exp: $str_exp\n";
  47. }
  48. r([4,2,1,3], [[1,2],[2,3],[3,4]]);
  49. r([1,3,6,10,15], [[1,3]]);
  50. r([3,8,-10,23,19,-4,-14,27], [[-14,-10],[19,23],[23,27]]);
  51. }
  52. main();