The k Strongest Values in an Array

Given an array of integers arr and an integer k.
A value arr[i] is said to be stronger than a value arr[j] if |arr[i] - m| > |arr[j] - m| where m is the median of the array.
If |arr[i] - m| == |arr[j] - m|, then arr[i] is said to be stronger than arr[j] if arr[i] > arr[j].
Return a list of the strongest k values in the array. return the answer in any arbitrary order.

Example 1:

Input: arr = {1,2,3,4,5}, k = 2
Output: newArr={5,1}

Approach

Java

import java.util.Arrays;
import java.util.Comparator;

public class KStrongestValuesINArray {
    public static void main(String[] args) {
        int arr[] = { 12345 };
        int k = 2;
        int newArr[] = getStrongest(arr, k);
        System.out.println(Arrays.toString(newArr));
    }

//function to find the median of the array
    static int getMedian(int[] arr) {
        Arrays.sort(arr);
        int n = arr.length;
        return arr[(n - 1) / 2];
    }

//function to find the k strongest value
//in the array
    static int[] getStrongest(int[] arrint k) {
        int median = getMedian(arr);
        int[][] v = new int[arr.length][2];
        for (int i = 0; i < arr.length; i++) {
            v[i] = new int[] { arr[i], Math.abs(arr[i] - median) };
        }
        Arrays.sort(v, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1int[] o2) {
                if (o1[1] == o2[1])
                    return o2[0] - o1[0];
                return o2[1] - o1[1];
            }
        });

        arr = new int[k];
        for (int i = 0; i < k; i++)
            arr[i] = v[i][0];
        return arr;
    }

}

C++

#include <bits/stdc++.h>
using namespace std;

//function to find the median of the
//array
int getMedian(vector<intarr)
{
        sort(arr.begin(),arr.end());
        int n=arr.size();
        return arr[(n-1)/2];
}

//comparator
static bool cmp(pair<int,int>a,pair<int,intb)
{
      if(a.second==b.second)
             return a.first>b.first;
       return a.second>b.second;
}

//function to find the k strongest value
//in the array
vector<intgetStrongest(vector<int>& arrint k
{
     int  median=getMedian(arr);
        vector<pair<int,int>> v;
      for(int i=0;i<arr.size();i++)
      {
          v.push_back({arr[i],abs(arr[i]-median)});
      }
        sort(v.begin(),v.end(),cmp);
        arr.clear();
        for(int i=0;i<k;i++)
              arr.push_back(v[i].first);
        return arr;

int main()
{
    vector<int>arr ={1,2,3,4,5};
    int k = 2;
    vector<intnewArr=getStrongest(arr,k);
    for(int i=0;i<newArr.size();i++)
      cout<<newArr[i]<<" ";
    return 0;
}


No comments:

Post a Comment