有人可以用新的视角来观看吗?我找不到我的错误。
练习和示例:
Input:
4 4
1 4 5 7
10 4 6 8
前两个数字:1) 产品数量 2) 客户数量。下一行:产品价格。第三行:客户拥有的金额。 脚本必须向客户推荐其预算范围内最昂贵的产品。每次输入都不同
Output:
7 4 5 7
我的这部分代码有问题:
int largest = price[0];
for(int i = 1; i < money.length; i++) {
for(int a = 1; a < price.length; a++) {
if(price[a] > largest && largest <= money[i]) {
largest = price[a];
System.out.print(largest + " ");
}
}
}
如有必要,请提供完整代码
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] sizes = scan.nextLine().split(" ");
int[] price = new int[Integer.parseInt(sizes[0])];
int[] money = new int[Integer.parseInt(sizes[1])];
String[] inputprice = scan.nextLine().split(" ");
for (int i = 0; i < price.length; i++) {
price[i] = Integer.parseInt(inputprice[i]);
}
String[] inputmoney = scan.nextLine().split(" ");
for (int i = 0; i < money.length; i++) {
money[i] = Integer.parseInt(inputmoney[i]);
}
scan.close();
int largest = price[0];
for (int i = 1; i < money.length; i++) {
for (int a = 1; a < price.length; a++) {
if (price[a] > largest && largest <= money[i]) {
largest = price[a];
System.out.print(largest + " ");
}
}
}
}
}
编辑: 仍然给出了一些错误的答案,但已经有了改进:
for(int i = 0; i < money.length; i++) {
int largest = price[0];
for(int a = 0; a < price.length; a++){
if(price[a] > largest && largest <= money[i]){
largest = price[a];
}
}
System.out.print(largest+ " ");
}
给出答案:
Output:
7 4 7 7
编辑: 代码似乎可以工作,但在将其发布到 codeforce 时会抛出运行时错误。怎么会这样?
最佳答案
您的最新版本中有两个错误:
- 初始化
int largest = price[0];
是不正确的。您应该初始化为尽可能低的值,否则largest
可能无效(错误地太高)。您可以将其设置为Integer.MIN_VALUE
. - 条件
price[a] > largest && largest <= money[i]
不正确,应该是price[a] > largest && price[a] <= money[i]
此外,最好使用 for-each 循环:
for (int m : money) {
int largest = Integer.MIN_VALUE;
for (int p : price) {
if (p > largest && p <= m) {
largest = p;
}
}
System.out.print(largest + " ");
}
请注意,该算法的性能为 O(m * p)
,
哪里m
的长度是money
和p
的长度是price
。
你可以做到O(p log p) + O(m * log p)
按排序price
并使用二分搜索来查找最高价格。
关于java - 最大数组/比较数组(新鲜 View ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47619793/