平均数大于k的最长子序列

73 阅读1分钟

问题描述

小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);
    }
}