给一 非负
整数数组. 取数组中的一部分元素, 使得它们的和大于数组中其余元素的和, 求出满足条件的元素数量最小值.
样例
给出 nums = [3, 1, 7, 1]
, 返回 1
给出 nums = [2, 1, 2]
, 返回 2
思路:
使得它们的和大于数组中其余元素的和,,注意这句话。隐含意思就是找到数组总和的一半
首先对整个数组进行排序,计算出总的数组之和,并找到数组和的一半 sum
然后按照数组元素的大小,sum减去数组元素 直到sum的值小于等于0,说明到了大小为数组和一半的位置
public class Solution {
/**
* @param arr: an array of non-negative integers
* @return: minimum number of elements
*/
public int minElements(int[] arr) {
// write your code here
Arrays.sort(arr);
int sum=0;
for(int i=0;i<arr.length;i++) {
sum+=arr[i];
}
sum = sum/2+1;
int count =0;
int ans = 0;
for(int j=arr.length-1;j>=0;j--) {
sum = sum-arr[j];
count++;
if(sum<=0)
{
ans = count;
break;
}
}
return ans;
}
}