首页 > 试题广场 >

牛牛的分配

[编程题]牛牛的分配
  • 热度指数:379 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
长度为n的数组,每次可以选择若干元素使元素的值变为这些元素的和的平均值
给出数组和数字x,求经过操作数组中最多有多少数字不小于x



示例1

输入

3,7,[9,4,9]

输出

3

说明

一开始有3个数字,分别为9,4,9,x为7,操作这3个数字后每个数字都不小于x 
示例2

输入

2,5,[4,3]

输出

0

说明

一共2个数字,无论怎么操作都不会大于等于x 

备注:



import java.util.*;
public class Solution {
    public int arrange (int n, int x, int[] a) {
        Arrays.sort(a);
        long count = 0,sum = 0;
        for(int i=n-1;i>=0;i--){
            sum += a[i];
            long avg = sum / (n - i);
            if(avg < x) break;
            else count ++;
        }
        return (int)count;
    }
}

发表于 2021-07-26 15:25:52 回复(0)
import java.util.*;


public class Solution {
    
       // 我们在做算法题的时候一定要注意能否自己定义的变量是否存的下应该存的数。
     // 思路:先排序,从最大那头开始一直往里加数,求平均值,直到平均值小于 
        // x时停止,返回加入数的个数。    
    public int arrange (int n, int x, int[] a) {
              if (a.length == 0) {             return 0;         }                  Arrays.sort(a);                  int lastLessThanX = 0; // 找出第一个大于x的下标;                  long sum = 0; // 计算总和                  int count = 0; //总和中元素个数                  boolean all = true; // 判断是否所有符合的标志                  for (int i = a.length - 1; i >= 0; i--) {             sum += a[i];             count ++;             if (sum / count < x) {                 all = false;                 break;             }         }                  if (!all) {             count--;         }                  return count;     } }

编辑于 2021-05-10 12:33:51 回复(1)