问题描述
小U手里有一个由nn个正整数组成的数组。她希望能够从中找到一个子序列,使得这个子序列的平均数大于一个给定的值kk。你的任务是帮助小U找到这样的子序列,并且求出其中最长的子序列长度。如果无法找到平均数大于kk的子序列,那么输出−1−1。
例如:给定数组为 [3, 1, 1, 2, 3],并且kk为2。你可以选择子序列 [3, 1, 2, 3],此时它的平均数为2.25,大于kk,并且这是最长的满足条件的子序列。
测试样例
样例1:
输入:
n = 5 ,k = 2 ,a = [3, 1, 1, 2, 3]
输出:4
样例2:
输入:
n = 3 ,k = 5 ,a = [1, 2, 3]
输出:0
样例3:
输入:
n = 6 ,k = 3 ,a = [6, 5, 2, 7, 8, 9]
输出:6
import java.util.Arrays;
public class Main {
public static int solution(int n, int k, int[] a) {
Arrays.sort(a);
float avg=0,tmp=0;
int i;
for(i=1;i<=n;i++){
tmp+=a[n-i];
avg=tmp/i;
if(avg<=k){
break;
}
}
if(i<n+1){
System.out.println(i);
return --i;
}
return n; // placeholder return
}
public static void main(String[] args) {
System.out.println(solution(5, 2, new int[]{3, 1, 1, 2, 3}) == 4);
System.out.println(solution(3, 5, new int[]{1, 2, 3}) == 0);
System.out.println(solution(6, 3, new int[]{6, 5, 2, 7, 8, 9}) == 6);
}
}