数组中的 k 个最强值

最近在力扣刷题的时候刷到一个自己感觉比较有意义的题目:

给你一个整数数组 arr 和一个整数 k 。

设 m 为数组的中位数,只要满足下述两个前提之一,就可以判定 arr[i] 的值比 arr[j] 的值更强:

|arr[i] - m| > |arr[j] - m|
|arr[i] - m| == |arr[j] - m|,且 arr[i] > arr[j]
请返回由数组中最强的 k 个值组成的列表。答案可以以 任意顺序 返回。

中位数 是一个有序整数列表中处于中间位置的值。形式上,如果列表的长度为 n ,那么中位数就是该有序列表(下标从 0 开始)中位于 ((n - 1) / 2) 的元素。

例如 arr = [6, -3, 7, 2, 11],n = 5:数组排序后得到 arr = [-3, 2, 6, 7, 11] ,数组的中间位置为 m = ((5 - 1) / 2) = 2 ,中位数 arr[m] 的值为 6 。
例如 arr = [-7, 22, 17, 3],n = 4:数组排序后得到 arr = [-7, 3, 17, 22] ,数组的中间位置为 m = ((4 - 1) / 2) = 1 ,中位数 arr[m] 的值为 3 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/the-k-strongest-values-in-an-array

package lmc;

import java.util.Arrays;

public class test {		
	public static int[] getStrongest(int[] arr, int k) {
		if (k>=arr.length||arr.length==0) {
			return arr;
		}
		Arrays.sort(arr);
		int zws = arr[(arr.length-1)/2];
		int [] ans = new int [k];
		int l = 0;
		int r = arr.length-1;
		for (int i = 0; i < ans.length; i++) {
			
				if (Math.abs(arr[r]-zws)>=Math.abs(arr[l]-zws)) {
					ans[i]=arr[r];
					r--;
				}else{
					ans[i]=arr[l];
					l++;
				}			
		}		
		
		return ans ;			
    }
	
	public static void main(String[] args) {
		int [] arr={6,7,11,7,6,8};
		int k = 5;
		getStrongest(arr,k);			
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值