diff --git a/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/README.md b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/README.md index 2b142c01d33c3..a99e20249441a 100644 --- a/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/README.md +++ b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/README.md @@ -243,6 +243,118 @@ impl Solution { } ``` +#### C# + +```cs +public class Solution { + public int MinimizeMax(int[] nums, int p) { + Array.Sort(nums); + int n = nums.Length; + int l = 0, r = nums[n - 1] - nums[0] + 1; + + bool check(int diff) { + int cnt = 0; + for (int i = 0; i < n - 1; ++i) { + if (nums[i + 1] - nums[i] <= diff) { + ++cnt; + ++i; + } + } + return cnt >= p; + } + + while (l < r) { + int mid = (l + r) >> 1; + if (check(mid)) { + r = mid; + } else { + l = mid + 1; + } + } + + return l; + } +} +``` + +#### PHP + +```php +class Solution { + /** + * @param Integer[] $nums + * @param Integer $p + * @return Integer + */ + function minimizeMax($nums, $p) { + sort($nums); + $n = count($nums); + $l = 0; + $r = $nums[$n - 1] - $nums[0] + 1; + + $check = function ($diff) use ($nums, $n, $p) { + $cnt = 0; + for ($i = 0; $i < $n - 1; ++$i) { + if ($nums[$i + 1] - $nums[$i] <= $diff) { + ++$cnt; + ++$i; + } + } + return $cnt >= $p; + }; + + while ($l < $r) { + $mid = intdiv($l + $r, 2); + if ($check($mid)) { + $r = $mid; + } else { + $l = $mid + 1; + } + } + + return $l; + } +} +``` + +#### Swift + +```swift +class Solution { + func minimizeMax(_ nums: [Int], _ p: Int) -> Int { + var nums = nums.sorted() + let n = nums.count + var l = 0 + var r = nums[n - 1] - nums[0] + 1 + + func check(_ diff: Int) -> Bool { + var cnt = 0 + var i = 0 + while i < n - 1 { + if nums[i + 1] - nums[i] <= diff { + cnt += 1 + i += 2 + } else { + i += 1 + } + } + return cnt >= p + } + + while l < r { + let mid = (l + r) >> 1 + if check(mid) { + r = mid + } else { + l = mid + 1 + } + } + + return l + } +} +``` + diff --git a/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/README_EN.md b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/README_EN.md index f853062cb3f20..ccda68c234913 100644 --- a/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/README_EN.md +++ b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/README_EN.md @@ -241,6 +241,118 @@ impl Solution { } ``` +#### C# + +```cs +public class Solution { + public int MinimizeMax(int[] nums, int p) { + Array.Sort(nums); + int n = nums.Length; + int l = 0, r = nums[n - 1] - nums[0] + 1; + + bool check(int diff) { + int cnt = 0; + for (int i = 0; i < n - 1; ++i) { + if (nums[i + 1] - nums[i] <= diff) { + ++cnt; + ++i; + } + } + return cnt >= p; + } + + while (l < r) { + int mid = (l + r) >> 1; + if (check(mid)) { + r = mid; + } else { + l = mid + 1; + } + } + + return l; + } +} +``` + +#### PHP + +```php +class Solution { + /** + * @param Integer[] $nums + * @param Integer $p + * @return Integer + */ + function minimizeMax($nums, $p) { + sort($nums); + $n = count($nums); + $l = 0; + $r = $nums[$n - 1] - $nums[0] + 1; + + $check = function ($diff) use ($nums, $n, $p) { + $cnt = 0; + for ($i = 0; $i < $n - 1; ++$i) { + if ($nums[$i + 1] - $nums[$i] <= $diff) { + ++$cnt; + ++$i; + } + } + return $cnt >= $p; + }; + + while ($l < $r) { + $mid = intdiv($l + $r, 2); + if ($check($mid)) { + $r = $mid; + } else { + $l = $mid + 1; + } + } + + return $l; + } +} +``` + +#### Swift + +```swift +class Solution { + func minimizeMax(_ nums: [Int], _ p: Int) -> Int { + var nums = nums.sorted() + let n = nums.count + var l = 0 + var r = nums[n - 1] - nums[0] + 1 + + func check(_ diff: Int) -> Bool { + var cnt = 0 + var i = 0 + while i < n - 1 { + if nums[i + 1] - nums[i] <= diff { + cnt += 1 + i += 2 + } else { + i += 1 + } + } + return cnt >= p + } + + while l < r { + let mid = (l + r) >> 1 + if check(mid) { + r = mid + } else { + l = mid + 1 + } + } + + return l + } +} +``` + diff --git a/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.cs b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.cs new file mode 100644 index 0000000000000..f1b0c0f703bc7 --- /dev/null +++ b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.cs @@ -0,0 +1,29 @@ +public class Solution { + public int MinimizeMax(int[] nums, int p) { + Array.Sort(nums); + int n = nums.Length; + int l = 0, r = nums[n - 1] - nums[0] + 1; + + bool check(int diff) { + int cnt = 0; + for (int i = 0; i < n - 1; ++i) { + if (nums[i + 1] - nums[i] <= diff) { + ++cnt; + ++i; + } + } + return cnt >= p; + } + + while (l < r) { + int mid = (l + r) >> 1; + if (check(mid)) { + r = mid; + } else { + l = mid + 1; + } + } + + return l; + } +} diff --git a/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.php b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.php new file mode 100644 index 0000000000000..4d859689f7459 --- /dev/null +++ b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.php @@ -0,0 +1,35 @@ +class Solution { + /** + * @param Integer[] $nums + * @param Integer $p + * @return Integer + */ + function minimizeMax($nums, $p) { + sort($nums); + $n = count($nums); + $l = 0; + $r = $nums[$n - 1] - $nums[0] + 1; + + $check = function ($diff) use ($nums, $n, $p) { + $cnt = 0; + for ($i = 0; $i < $n - 1; ++$i) { + if ($nums[$i + 1] - $nums[$i] <= $diff) { + ++$cnt; + ++$i; + } + } + return $cnt >= $p; + }; + + while ($l < $r) { + $mid = intdiv($l + $r, 2); + if ($check($mid)) { + $r = $mid; + } else { + $l = $mid + 1; + } + } + + return $l; + } +} \ No newline at end of file diff --git a/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.swift b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.swift new file mode 100644 index 0000000000000..4a3a59a77f4ba --- /dev/null +++ b/solution/2600-2699/2616.Minimize the Maximum Difference of Pairs/Solution.swift @@ -0,0 +1,33 @@ +class Solution { + func minimizeMax(_ nums: [Int], _ p: Int) -> Int { + var nums = nums.sorted() + let n = nums.count + var l = 0 + var r = nums[n - 1] - nums[0] + 1 + + func check(_ diff: Int) -> Bool { + var cnt = 0 + var i = 0 + while i < n - 1 { + if nums[i + 1] - nums[i] <= diff { + cnt += 1 + i += 2 + } else { + i += 1 + } + } + return cnt >= p + } + + while l < r { + let mid = (l + r) >> 1 + if check(mid) { + r = mid + } else { + l = mid + 1 + } + } + + return l + } +}