📌  相关文章
📜  删除给定元素后,给定数组的中位数发生变化

📅  最后修改于: 2021-05-14 00:12:34             🧑  作者: Mango

给定两个数组arr1 []arr2 [] 。数组arr1 []已排序。任务是一一删除数组arr2 []中的每个元素,然后打印中位数的变化。

注意:数组arr2 []仅具有数组arr1 []中存在的那些元素。

例子:

方法:我们的想法是遍历数组ARR2 []中的每个元素和从阵列ARR1 []删除每个元件和存储在一个阵列中的每个去除元件的后面的阵列ARR1 []的中值(比如说温度[])。arr2 []中删除元素后,打印数组元素的连续差值以获取中位数的变化。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
using namespace std;
 
// Function to find the median change
// after removing elements from arr2[]
void medianChange(vector& arr1,
                  vector& arr2)
{
    int N = arr1.size();
 
    // To store the median
    vector median;
 
    // Store the current median
 
    // If N is odd
    if (N & 1) {
        median
            .push_back(arr1[N / 2] * 1.0);
    }
 
    // If N is even
    else {
        median
            .push_back((arr1[N / 2]
                        + arr1[(N - 1) / 2])
                       / 2.0);
    }
 
    for (auto& x : arr2) {
 
        // Find the current element
        // in arr1
        auto it = find(arr1.begin(),
                       arr1.end(),
                       x);
 
        // Erase the element
        arr1.erase(it);
 
        // Decrement N
        N--;
 
        // Find the new median
        // and append
 
        // If N is odd
        if (N & 1) {
            median
                .push_back(arr1[N / 2] * 1.0);
        }
 
        // If N is even
        else {
            median
                .push_back((arr1[N / 2]
                            + arr1[(N - 1) / 2])
                           / 2.0);
        }
    }
 
    // Print the corresponding
    // difference of median
    for (int i = 0;
         i < median.size() - 1;
         i++) {
        cout << median[i + 1] - median[i]
             << ' ';
    }
}
 
// Driven Code
int main()
{
    // Given arrays
    vector arr1 = { 2, 4, 6, 8, 10 };
    vector arr2 = { 4, 6 };
 
    // Function Call
    medianChange(arr1, arr2);
 
    return 0;
}


Java
// Java program for the
// above approach
import java.util.*;
 
class GFG{
     
// Function to find the median
// change after removing elements
// from arr2[]
public static void medianChange(List arr1,
                                List arr2)
{
    int N = arr1.size();
  
    // To store the median
    List median = new ArrayList<>();
  
    // Store the current median
  
    // If N is odd
    if ((N & 1) != 0)
        median.add(arr1.get(N / 2) * 1);
  
    // If N is even
    else
        median.add((arr1.get(N / 2) +
                    arr1.get((N - 1) / 2)) / 2);
  
    for(int x = 0; x < arr2.size(); x++)
    {
         
        // Find the current element
        // in arr1
        int it = arr1.indexOf(arr2.get(x));
  
        // Erase the element
        arr1.remove(it);
  
        // Decrement N
        N--;
  
        // Find the new median
        // and append
  
        // If N is odd
        if ((N & 1) != 0)
        {
            median.add(arr1.get(N / 2) * 1);
        }
         
        // If N is even
        else
        {
            median.add((arr1.get(N / 2) +
                        arr1.get((N - 1) / 2)) / 2);
        }
    }
  
    // Print the corresponding
    // difference of median
    for(int i = 0; i < median.size() - 1; i++)
    {
        System.out.print(median.get(i + 1) -
                         median.get(i) + " ");
    }
}
 
// Driver Code             
public static void main(String[] args)
{
     
    // Given arrays
    List arr1  = new ArrayList(){
        { add(2); add(4); add(6); add(8); add(10); } };
    List arr2 = new ArrayList(){
        { add(4); add(6); } };
  
    // Function Call
    medianChange(arr1, arr2);
}
}
 
// This code is contributed by divyesh072019


Python3
# Python3 program for the
# above approach
 
# Function to find the median
# change after removing elements
# from arr2[]
def medianChange(arr1, arr2):
 
    N = len(arr1)
 
    # To store the median
    median = []
 
    # Store the current median
 
    # If N is odd
    if (N & 1):
        median.append(arr1[N // 2] * 1)
 
    # If N is even
    else:
        median.append((arr1[N // 2] +
                       arr1[(N - 1) // 2]) // 2)
 
    for x in arr2:
 
        # Find the current
        # element in arr1
        it = arr1.index(x)
 
        # Erase the element
        arr1.pop(it)
 
        # Decrement N
        N -= 1
 
        # Find the new median
        # and append
 
        # If N is odd
        if (N & 1):
            median.append(arr1[N // 2] * 1)
 
        # If N is even
        else:
            median.append((arr1[N // 2] +
                           arr1[(N - 1) // 2]) // 2)
 
    # Print the corresponding
    # difference of median
    for i in range(len(median) - 1):
        print(median[i + 1] - median[i],
              end = ' ')
 
# Driver Code
if __name__ == "__main__":
 
    # Given arrays
    arr1 = [2, 4, 6,
            8, 10]
    arr2 = [4, 6]
 
    # Function Call
    medianChange(arr1, arr2)
 
# This code is contributed by Chitranayal


C#
// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
     
// Function to find the median change
// after removing elements from arr2[]
static void medianChange(List arr1,
                         List arr2)
{
    int N = arr1.Count;
  
    // To store the median
    List median = new List();
  
    // Store the current median
  
    // If N is odd
    if ((N & 1) != 0)
    {
        median.Add(arr1[N / 2] * 1.0);
    }
  
    // If N is even
    else
    {
        median.Add((arr1[N / 2] +
              arr1[(N - 1) / 2]) / 2.0);
    }
  
    foreach(int x in arr2)
    {
         
        // Find the current element
        // in arr1
        int it = arr1.IndexOf(x);
  
        // Erase the element
        arr1.RemoveAt(it);
  
        // Decrement N
        N--;
  
        // Find the new median
        // and append
  
        // If N is odd
        if ((N & 1) != 0)
        {
            median.Add(arr1[N / 2] * 1.0);
        }
  
        // If N is even
        else
        {
            median.Add((arr1[N / 2] +
                  arr1[(N - 1) / 2]) / 2.0);
        }
    }
  
    // Print the corresponding
    // difference of median
    for(int i = 0; i < median.Count - 1; i++)
    {
        Console.Write(median[i + 1] -
                      median[i] + " ");
    }
}
 
// Driver Code
static void Main()
{
     
    // Given arrays
    List arr1 = new List(
        new int[]{ 2, 4, 6, 8, 10 });
    List arr2 = new List(
        new int[]{ 4, 6 });
  
    // Function Call
    medianChange(arr1, arr2);
}
}
 
// This code is contributed by divyeshrabadiya07


输出:
1 1

时间复杂度: O(M * N)