为什么我的代码无法通过隐藏的输入测试用例?



这是要解决的问题:

约翰今天被分配了一项新任务。他得到一个包含 N 个整数的数组 A。他的任务是将数组的所有元素更新为某个最小值x,也就是说,A[i] = x; 1 <= i <= N;使得这个新数组的总和严格大于初始数组的总和。 请注意,x 应尽可能小,以便新数组的总和大于初始数组的总和。

输入格式:输入的第一行由一个整数 N 组成,表示数组 A 中的元素数。

第二行由 N 个空格分隔的整数组成,表示数组元素。

输出格式:唯一的输出行由 x 的值组成。

示例输入:

5

12345

样本输出:4解释:

数组的初始和= 1 + 2 + 3 + 4 + 5 = 15

当我们将所有元素更新为 4 时,数组的总和 = 4 + 4 + 4 + 4 = 20,大于 15。

请注意,如果我们将数组元素更新为 3,则 sum = 15,不大于 15。因此,4 是数组元素需要更新到的最小值。

** ==> 这是我的代码。我该如何改进它?或者此代码中有什么问题?**

import java.util.Scanner;
public class Test2 {
public static void main(String []args){
Scanner s=new Scanner(System.in);
int check=0, sum=0, biggest=0;
int size=s.nextInt();
if(size>=1 && size<=100000) {
int[] arr=new int[size];
for(int i=0; i<size; i++){
int temp=s.nextInt();
if(temp>=1 && temp<=1000) {
arr[i] = temp;
biggest=biggest > temp ? biggest:temp;
sum=sum+temp;
}
else break;
}
for(int i=1; i<biggest; i++){
check=(size*i)>sum ? i:0;
}
System.out.print(check);
}
else System.err.print("Invalid input size");

}
}

问题:

for(int i=1; i<biggest; i++){
check=(size*i)>sum ? i:0;
}

这有2问题,因此它不起作用。它们如下-

  • (size*i)>sum ? i- 问题语句指出它需要大于元素数组总和的最小可能总和。您的代码盲目地将i分配给check,而不检查最小值

  • check=(size*i)>sum ? i:0- 因此,即使您遇到一些整数previously,您也会丢失它,因为如果不满足条件,则将其分配给0

我将分享我的想法,我将如何做到这一点。

方法1

  • 像你一样对所有元素求和。
  • 现在,取元素的平均值 - 数组的总和/大小。假设我们将其存储在 变量average.
  • 打印平均值 + 1作为您的答案,因为这是可以为您提供数组本身总和>最小可能总和的值。

时间复杂度:O(n(,其中n是数组的大小。

空间复杂度:O(1(

方法2

  • 像你一样对所有元素求和。
  • 计算数组的最小值和最大值并将其存储在变量中,例如minimaxi
  • 现在,在minimaxi之间进行二叉搜索,并继续检查minimum sum > sum条件。
  • 在此过程中,您将拥有lowmidhigh等变量。

    low = mini,high = maxi
    while low <= high:
    mid = low + (high - low) / 2
    If mid * size <= sum, 
    low  = mid + 1
    else 
    high = mid - 1
    
  • 现在,打印low作为您的答案。

range=maxi-mini.

时间复杂度:O(n( + O(log(range(( = O(n( 渐近,其中n是数组的大小。

空间复杂度:O(1(

不确定我是否完全遵循了您的尝试,但应该有一个非常简单的解决方案。您知道数组的大小,并且可以轻松地遍历数组以获取存储在其中的元素的值。要找到您的最小值x,您需要做的就是获取数组的sumOfArray/大小,然后将一个添加到结果中以使结果更高。

在你的例子中 15/5=3. 3+1 = 4 所以这就是你的答案。如果数字总和为 43,43/5 = 8 r 3,那么您的答案是 9 (9*5=45(。等。

当尝试其他一些测试用例时,结果是错误的。尝试:

输入:

5
1 1 1 1 5

预期输出:2实际输出:4

输入:

5
5 5 5 5 5

预期输出:6实际输出:0

相关内容

  • 没有找到相关文章

最新更新