Java Solution - Quick Select
\nclass Solution {\n    public int[] getStrongest(int[] arr, int k) {\n        int n  = arr.length;\n        int median = findKthLargest(arr, 0, n - 1, n / 2 + 
```\nclass Solution {\n    public int[] getStrongest(int[] arr, int k) {\n        int n  = arr.length;\n        int median = findKthLargest(arr, 0, n - 1, n / 2 + 1);\n        int idx = helper(arr, 0, n - 1, k, median);\n        int[] ans = new int[k];\n        for (int i = 0; i < k; i++) {\n            ans[i] = arr[i];\n        }\n        return ans;\n    }\n    \n    public int findKthLargest(int[] arr, int start, int end, int k) {\n        if (start >= end) {\n            return arr[end];\n        }\n        int left = start;\n        int right = end;\n        int pivot = arr[end];\n        while (left <= right) {\n            while (left <= right && arr[left] > pivot) {\n                left++;\n            }\n            while (left <= right && arr[right] < pivot) {\n                right--;\n            }\n            if (left <= right) {\n                int temp = arr[left];\n                arr[left] = arr[right];\n                arr[right] = temp;\n                left++;\n                right--;\n            }\n        }\n        if (start + (k - 1) <= right) {\n            return findKthLargest(arr, start, right, k);\n        } else if (start + (k - 1) >= left) {\n            return findKthLargest(arr, left, end, k - (left - start));\n        }\n        return arr[right + 1];\n    }\n    \n    public int helper(int[] arr, int start, int end, int k, int median) {\n        if (start >= end) {\n            return end;\n        }\n        int left = start; \n        int right = end;\n        int pivot = getStrength(arr[end], median);\n        while (left <= right) {\n            while (left <= right && isStronger(getStrength(arr[left], median), pivot, arr[left], arr[end])) {\n                left++;\n            }\n            while (left <= right && isWeaker(getStrength(arr[right], median), pivot, arr[right], arr[end])) {\n                right--;\n            }\n            if (left <= right) {\n                int temp = arr[left];\n                arr[left] = arr[right];\n                arr[right] = temp;\n                left++;\n                right--;\n            }\n        }\n        if (start + (k - 1) <= right) {\n            return helper(arr, start, right, k, median);\n        } else if (start + (k - 1) >= left) {\n            return helper(arr, left, end, k - (left - start), median);\n        } else {\n            return right + 1;\n        }\n    }\n    \n    public int getStrength(int n, int median) {\n        return Math.abs(n - median);\n    }\n    \n    public boolean isStronger(int s1, int s2, int num, int end) {\n        return s1 == s2 ? num > end : s1 > s2;\n    }\n    \n    public boolean isWeaker(int s1, int s2, int num, int end) {\n        return s1 == s2 ? num < end : s1 < s2;\n    }\n}\n```
[]