描述
给一 非负
整数数组. 取数组中的一部分元素, 使得它们的和大于数组中其余元素的和, 求出满足条件的元素数量最小值.
个人思路:要求取出元素的和大于数组其余元素的和,那么毫无疑问当前的贪心策略应该是优先取出最大的元素。然后比较取出元素的和和生于元素的和,哪一个更大
public int minElements(int[] arr) {
// write your code here
Arrays.sort(arr);
int[] sumArr = new int[arr.length];
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
sumArr[i] = sum;
}
int count = 1;
int diff = 0;
int j = sumArr.length-1;
while (diff <= sumArr[j - count]){
diff = sumArr[j] - sumArr[j-count];
if (diff > sumArr[j - count])
break;
count++;
}
return count;
}
summary:这里表达每个位置i的和可以不用数组表达,用两个变量就行,感觉用数组鸡肋
dalao写法:
public int minElements(int[] a) {
// write your code here
Arrays.sort(a); //数组排序
int sum = 0;
for(int i=0;i<a.length;i++)
{
sum+= a[i];
}
int sumr = 0;
int r = 1;
for(int i=a.length-1;i>=0;i--)
{
sumr += a[i];
if(sum - sumr > sumr ){
r++;
}else{
break;
}
}
return r;
}