Given an array of integers
A value
If
Return a list of the strongest k values in the array. return the answer in any arbitrary order.
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[] = { 1, 2, 3, 4, 5 };int k = 2;int newArr[] = getStrongest(arr, k);System.out.println(Arrays.toString(newArr));}//function to find the median of the arraystatic 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 arraystatic int[] getStrongest(int[] arr, int 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[]>() {@Overridepublic int compare(int[] o1, int[] 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//arrayint getMedian(vector<int> arr){sort(arr.begin(),arr.end());int n=arr.size();return arr[(n-1)/2];}//comparatorstatic bool cmp(pair<int,int>a,pair<int,int> b){if(a.second==b.second)return a.first>b.first;return a.second>b.second;}//function to find the k strongest value//in the arrayvector<int> getStrongest(vector<int>& arr, int 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<int> newArr=getStrongest(arr,k);for(int i=0;i<newArr.size();i++)cout<<newArr[i]<<" ";return 0;}
No comments:
Post a Comment