From e42a7bd55beffc4df843417e6a8d21ba52c708d3 Mon Sep 17 00:00:00 2001
From: Sadaf <137484958+SadafKausar2025@users.noreply.github.com>
Date: Tue, 18 Jun 2024 22:49:28 +0530
Subject: [PATCH] Added leetcode -3107 minimum operation to make median equal
to k
---
dsa-problems/leetcode-problems/3100-3199.md | 2 +-
.../3100-3199/3100-Water-Bottles-II.md | 2 +-
.../3101-count-alternating-subarrays.md | 8 +-
.../3102-Minimize Manhattan Distance.md | 11 +-
...tion-to-make-median-of-array-equal-to-k.md | 193 ++++++++++++++++++
.../lc-solutions/3100-3199/image-2.png | Bin 0 -> 997711 bytes
6 files changed, 203 insertions(+), 13 deletions(-)
create mode 100644 dsa-solutions/lc-solutions/3100-3199/3107-Minimum-opration-to-make-median-of-array-equal-to-k.md
create mode 100644 dsa-solutions/lc-solutions/3100-3199/image-2.png
diff --git a/dsa-problems/leetcode-problems/3100-3199.md b/dsa-problems/leetcode-problems/3100-3199.md
index ee901c12b..7c1a9e96c 100644
--- a/dsa-problems/leetcode-problems/3100-3199.md
+++ b/dsa-problems/leetcode-problems/3100-3199.md
@@ -56,7 +56,7 @@ export const problems = [
"problemName": "3107. Minimum Operations to Make Median of Array Equal to K",
"difficulty": "Medium",
"leetCodeLink": "https://leetcode.com/problems/minimum-operations-to-make-median-of-array-equal-to-k",
-"solutionLink": "#"
+"solutionLink": "/dsa-solutions/lc-solutions/3100-3199/Minimum-operation-to-make-median-of-array-equal-to-k"
},
{
"problemName": "3108. Minimum Cost Walk in Weighted Graph",
diff --git a/dsa-solutions/lc-solutions/3100-3199/3100-Water-Bottles-II.md b/dsa-solutions/lc-solutions/3100-3199/3100-Water-Bottles-II.md
index e08332816..cd141719a 100644
--- a/dsa-solutions/lc-solutions/3100-3199/3100-Water-Bottles-II.md
+++ b/dsa-solutions/lc-solutions/3100-3199/3100-Water-Bottles-II.md
@@ -2,7 +2,7 @@
id: water-bottles-II
title: Water-Bottles-II
level: hard
-sidebar_label: Water-Bottles-II
+sidebar_label: 3100-Water-Bottles-II
tags:
- Dynamic Programming
- Bit Manipulation
diff --git a/dsa-solutions/lc-solutions/3100-3199/3101-count-alternating-subarrays.md b/dsa-solutions/lc-solutions/3100-3199/3101-count-alternating-subarrays.md
index 2aeadf6ad..18fba8661 100644
--- a/dsa-solutions/lc-solutions/3100-3199/3101-count-alternating-subarrays.md
+++ b/dsa-solutions/lc-solutions/3100-3199/3101-count-alternating-subarrays.md
@@ -2,7 +2,7 @@
id: Count-Alternating-subarrays
title: Count-Alternating-subarrays
level: hard
-sidebar_label: Count-Alternating-subarrays
+sidebar_label: 3101-Count-Alternating-subarrays
tags:
- Dynamic Programming
- Bit Manipulation
@@ -83,13 +83,11 @@ The provided code effectively implements the sliding window approach with the me
4. int left = 0;: Initializes left and right pointers, both starting at index 0.
-
- - int right = 0;
+ - int right = 0;
5. while (right < n): A loop that continues as long as right hasn't reached the end of the array.
-
- - while (right < n - 1 && nums[right] != nums[right + 1]): This inner loop extends the current subarray as long as adjacent elements differ.
+ - while (right < n - 1 && nums[right] != nums[right + 1]): This inner loop extends the current subarray as long as adjacent elements differ.
6. It checks if right is within bounds and if the elements at right and right + 1 are different.
diff --git a/dsa-solutions/lc-solutions/3100-3199/3102-Minimize Manhattan Distance.md b/dsa-solutions/lc-solutions/3100-3199/3102-Minimize Manhattan Distance.md
index 48d5473fb..e3c0b6c96 100644
--- a/dsa-solutions/lc-solutions/3100-3199/3102-Minimize Manhattan Distance.md
+++ b/dsa-solutions/lc-solutions/3100-3199/3102-Minimize Manhattan Distance.md
@@ -2,7 +2,7 @@
id: Minimize-Manhattan-Distances
title: Minimize Manhattan Distances
level: hard
-sidebar_label: Minimize Manhattan Distances
+sidebar_label: 3102-Minimize Manhattan Distances
tags:
- Dynamic Programming
- Bit Manipulation
@@ -74,15 +74,14 @@ Constraints:
`maxi=max(maxsum-minsum,maxdiff-mindiff);`
-
- Now, find the values of minsum, maxsum, mindiff, maxdiff
- - `minsum=st1.begin(), maxsum=--st1.end()`
+ - `minsum=st1.begin(), maxsum=--st1.end()`
- - `mindiff=st2.begin(), maxdiff=--st2.end()`
+ - `mindiff=st2.begin(), maxdiff=--st2.end()`
- `Note:- st.end() denotes an iterator pointing to the position
- just after the last element that's why we have taken --st.end()`
+ `Note:- st.end() denotes an iterator pointing to the position
+ just after the last element that's why we have taken --st.end()`
8. After finding the maximum value upon removal of the current sum and difference, store the minimum computed so far in variable mini which holds the minimum of all Manhattan Distance found so far.
diff --git a/dsa-solutions/lc-solutions/3100-3199/3107-Minimum-opration-to-make-median-of-array-equal-to-k.md b/dsa-solutions/lc-solutions/3100-3199/3107-Minimum-opration-to-make-median-of-array-equal-to-k.md
new file mode 100644
index 000000000..f4d4ef780
--- /dev/null
+++ b/dsa-solutions/lc-solutions/3100-3199/3107-Minimum-opration-to-make-median-of-array-equal-to-k.md
@@ -0,0 +1,193 @@
+---
+id: Minimum-operation-to-make-median-of-array-equal-to-k
+title: Minimum-operation-to-make-median-of-array-equal-to-k
+sidebar_label: 3107-Minimum-operation-to-make-median-of-array-equal-to-k
+tags:
+ - Java
+ - Greedy
+ - String
+description: "This document provides a solution of Minimum-operation-to-make-median-of-array-equal-to-k"
+---
+
+## Problem statement:
+
+You are given an integer array nums and a non-negative integer k. In one operation, you can increase or decrease any element by 1.
+
+Return the minimum number of operations needed to make the median of nums equal to k.
+
+The median of an array is defined as the middle element of the array when it is sorted in non-decreasing order. If there are two choices for a median, the larger of the two values is taken.
+
+**Example 1:**
+
+Input: nums = [2,5,6,8,5], k = 4
+Output: 2
+
+Explanation:
+We can subtract one from nums[1] and nums[4] to obtain [2, 4, 6, 8, 4]. The median of the resulting array is equal to k.
+
+**Example 2:**
+
+Input: nums = [2,5,6,8,5], k = 7
+Output: 3
+
+Explanation:
+We can add one to nums[1] twice and add one to nums[2] once to obtain [2, 7, 7, 8, 5].
+
+**Example 3:**
+
+Input: nums = [1,2,3,4,5,6], k = 4
+Output: 0
+
+Explanation:
+The median of the array is already equal to k.
+
+Constraints:
+
+`1 <= nums.length <= 2 * 105`
+`1 <= nums[i] <= 109`
+`1 <= k <= 109`
+
+## Solutions:
+
+### Intuition
+
+-> Plot the intial points and the expected points of the given array on a graph.
+-> To find the expected median 'k' the expected graph should coincide with the inital graph.
+-> Find minimum number of steps to coincide them.
+
+### Approach
+
+consider: nums = [2,5,6,8,5], k = 4
+
+ 
+
+1. till the n/2th element-> all elements to the left of expected graph should be merged with the expected graph and those on the right wouldn't affect the median so no need to add in answer.
+
+2. for n/2th element it should be same for both graphs, so take difference and add.
+
+3. for elements after n/2-> the element to the left of expected graph wouldn't affect the median however those on the right will, so shift them so that they coincide and add the cost of shifting as well.
+
+### Observation:
+
+To make both the graphs coincide:
+
+1. For elements less than the median (i < n / 2): calculate the difference between the current element nums[i] and the target value k. If this difference is positive (i.e., nums[i] is greater than k), add this difference to ans. Otherwise, add 0(already conincided).
+
+2. For the median element itself (i == n / 2): calculate the absolute difference between the current element nums[i] and k and add it to ans. This ensures that regardless of whether k is greater or smaller than the median, its distance is considered.
+
+3. For elements greater than the median (i > n / 2): calculate the difference between k and the current element nums[i]. If this difference is positive (i.e., nums[i] is less than k), add this difference to ans. Otherwise, add 0(already coincided).
+
+## code:
+
+
+
+
+ ```cpp
+ #include
+ #include
+ using namespace std;
+
+ class Solution {
+ public:
+ long long minOperationsToMakeMedianK(vector& nums, int k) {
+ int n = nums.size();
+ sort(nums.begin(), nums.end());
+ long long ans = 0;
+ for (int i = 0; i < n; i++) {
+ if (i < n / 2)
+ ans += max(0, nums[i] - k); // 1st case
+ else if (i == n / 2)
+ ans += abs(nums[i] - k); // 2nd case
+ else
+ ans += max(0, k - nums[i]); // 3rd case
+ }
+ return ans;
+ }
+ };
+ ```
+
+
+
+ ```java
+ import java.util.*;
+
+ public class Solution {
+ public long minOperationsToMakeMedianK(List nums, int k) {
+ int n = nums.size();
+ Collections.sort(nums);
+ long ans = 0;
+ for (int i = 0; i < n; i++) {
+ if (i < n / 2)
+ ans += Math.max(0, nums.get(i) - k); // 1st case
+ else if (i == n / 2)
+ ans += Math.abs(nums.get(i) - k); // 2nd case
+ else
+ ans += Math.max(0, k - nums.get(i)); // 3rd case
+ }
+ return ans;
+ }
+ }
+ ```
+
+
+
+ ```python
+ from typing import List
+
+ class Solution:
+ def minOperationsToMakeMedianK(self, nums: List[int], k: int) -> int:
+ n = len(nums)
+ nums.sort()
+ ans = 0
+ for i in range(n):
+ if i < n // 2:
+ ans += max(0, nums[i] - k) # 1st case
+ elif i == n // 2:
+ ans += abs(nums[i] - k) # 2nd case
+ else:
+ ans += max(0, k - nums[i]) # 3rd case
+ return ans
+ ```
+
+
+
+ ```c
+ #include
+ #include
+ #include
+
+ int cmp(const void* a, const void* b) {
+ return (*(int*)a - *(int*)b);
+ }
+
+ long long minOperationsToMakeMedianK(int* nums, int numsSize, int k) {
+ qsort(nums, numsSize, sizeof(int), cmp);
+ long long ans = 0;
+ for (int i = 0; i < numsSize; i++) {
+ if (i < numsSize / 2)
+ ans += nums[i] > k ? nums[i] - k : 0; // 1st case
+ else if (i == numsSize / 2)
+ ans += abs(nums[i] - k); // 2nd case
+ else
+ ans += nums[i] < k ? k - nums[i] : 0; // 3rd case
+ }
+ return ans;
+ }
+
+ int main() {
+ int nums[] = {1, 3, 2, 5, 4};
+ int numsSize = sizeof(nums) / sizeof(nums[0]);
+ int k = 3;
+ printf("%lld\n", minOperationsToMakeMedianK(nums, numsSize, k));
+ return 0;
+ }
+ ```
+
+
+
+
+## Complexity
+
+Time complexity: $O(nlogn)$
+
+Space complexity: $O(1)$
diff --git a/dsa-solutions/lc-solutions/3100-3199/image-2.png b/dsa-solutions/lc-solutions/3100-3199/image-2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef5c4836260ee98259d522330c80d52f19653ca1
GIT binary patch
literal 997711
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