【发布时间】:2021-03-23 22:43:28
【问题描述】:
您好,请帮助我为这个问题提供优化的解决方案。我还在下面附上了一个潜在的解决方案。我需要帮助来优化 Java 中的代码。问题如下。
问题:
Varun 的团队参加了在 FoodContest 举办的饮食比赛 他们被要求至少吃P个苹果。 Varun 的团队包括 N 个成员中的成员 i (1
注意:会员可以吃苹果任意次数。
示例
示例输入:- n=4, p=10, Arr[i] = {1 ,2 ,3 ,4}
样本输出:6
说明:-
第一个成员会吃 6 个苹果,(即 1*6)
第二个成员将吃 3 个苹果,(2*3)
第 3 位成员将吃 2 个苹果,(3*2)
第 4 个成员将吃 1 个苹果,(4*1)
total = 12 ( total > p ) 即团队至少需要 6 分钟(最少)才能吃掉至少 10 个苹果。
示例输入:- n=7 ,p=7 , Arr[i] = { 1 ,1 ,1 ,1, 1, 1 ,1 }
样本输出:1
约束:-
1
1
1
代码:(注意:我需要帮助来优化这段代码,同时降低时间复杂度)
import java.io.*;
import java.util.*;
class Main {
public static void main (String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
String[] input = br.readLine().split(" ");
int n = Integer.parseInt(str[0]);
long p = Long.parseLong(str[1]);
long [] arr = new long [n];
long max = 1000000000000L ;
for(int i=0; i<n; i++)
{
arr[i] = Long.parseLong(input[i]);
}
for(long j=1;j<=max;j++){
long sum=0;
for(int i=0;i<n;i++){
long rem=j/arr[i];
sum=sum+rem;
if(sum>=p){
System.out.println(j);
return;
}
}
}
}
}
【问题讨论】:
-
所以...有 >>youWhy is “Can someone help me?” not an actual question?
-
感谢斯蒂芬的评论。 .感谢您指出有问题的错误。这个问题没有错误,唯一的问题是我的解决方案的时间复杂度会很高。所以我需要你的帮助来优化它。我指出二进制搜索的原因是因为我的一个朋友说我们可以用二进制搜索进行优化,但我没有明白他的意思。如果您对我的代码有任何潜在的优化解决方案,请在下面发表评论。
标签: java data-structures time-complexity binary-search