|
|
@@ -0,0 +1,64 @@
|
|
|
+<?php
|
|
|
+# 1200. Minimum Absolute Difference
|
|
|
+
|
|
|
+# Failed
|
|
|
+class Solution {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param Integer[] $arr
|
|
|
+ * @return Integer[][]
|
|
|
+ */
|
|
|
+ function minimumAbsDifference($arr) {
|
|
|
+ $abs_arr = array_map('abs', $arr);
|
|
|
+ asort($abs_arr);
|
|
|
+ $abs_arr_keys = array_keys($abs_arr);
|
|
|
+
|
|
|
+ $matchs = [];
|
|
|
+
|
|
|
+ $min_diff = 99999999999;
|
|
|
+
|
|
|
+ $limit = count($abs_arr) - 1;
|
|
|
+ $f = current($abs_arr);
|
|
|
+ for ( $i = 0; $i < $limit; ++$i) {
|
|
|
+ $s = next($abs_arr);
|
|
|
+ $diff = $s - $f;
|
|
|
+ $f = $s;
|
|
|
+
|
|
|
+ $fo = $arr[$abs_arr_keys[$i]];
|
|
|
+ $so = $arr[$abs_arr_keys[$i+1]];
|
|
|
+ if ( $fo >= $so ) { continue; }
|
|
|
+
|
|
|
+ if ( $diff < $min_diff ) { $min_diff = $diff; }
|
|
|
+ if ( ! array_key_exists($diff, $matchs) ) {
|
|
|
+ $matchs[$diff] = [[$i, $i+1]]; continue;
|
|
|
+ }
|
|
|
+ array_push($matchs[$diff], [$i, $i+1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ $res = [];
|
|
|
+
|
|
|
+ foreach ( $matchs[$min_diff] as $t ) {
|
|
|
+ $f = $arr[$abs_arr_keys[$t[0]]];
|
|
|
+ $s = $arr[$abs_arr_keys[$t[1]]];
|
|
|
+ array_push($res, [$f, $s]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $res;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function main() {
|
|
|
+ function r($a, $exp) {
|
|
|
+ $S = new Solution;
|
|
|
+ $r = $S->minimumAbsDifference($a);
|
|
|
+ $str_a = json_encode($a);
|
|
|
+ $str_r = json_encode($r);
|
|
|
+ $str_exp = json_encode($exp);
|
|
|
+ echo "Solution().minimumAbsDifference(\"$str_a\") = $str_r | exp: $str_exp\n";
|
|
|
+ }
|
|
|
+ r([4,2,1,3], [[1,2],[2,3],[3,4]]);
|
|
|
+ r([1,3,6,10,15], [[1,3]]);
|
|
|
+ r([3,8,-10,23,19,-4,-14,27], [[-14,-10],[19,23],[23,27]]);
|
|
|
+}
|
|
|
+
|
|
|
+main();
|