【问题标题】:Largest array / Comparing arrays (fresh view?)最大数组/比较数组(新视图?)
【发布时间】:2017-12-03 15:14:54
【问题描述】:

有人能以全新的视角观看吗?我找不到我的错误。

练习和例子:

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 时会引发运行时错误。怎么样?

【问题讨论】:

  • 数组是从零开始的,您从 1 开始初始化 for 循环。此外,每次运行外部 for 循环时,您都需要初始化 largest
  • 你遇到了什么错误
  • 使用我的代码,我得到了输出:“4 5 7”,但没有得到第一个答案。使用@Nimrod Argov 的解决方案,得到“4 5 7 4 5 4 5 7 4 5 7”作为答案
  • 每次找到更大的数字时,您也会打印。在内循环结束后打印。
  • @waynekenoff。这个条件是错误的if(price[a] &gt; largest &amp;&amp; largest &lt;= money[i])。应该是if (price[a] &gt; largest &amp;&amp; price[a] &lt;= money[i])

标签: java arrays


【解决方案1】:

你的最新版本有两个错误:

  • 初始化int largest = price[0]; 不正确。您应该初始化为可能的最低值,否则largest 可能无效(错误地太高)。您可以将其设置为Integer.MIN_VALUE
  • 条件price[a] &gt; largest &amp;&amp; largest &lt;= money[i]不正确,应该是price[a] &gt; largest &amp;&amp; price[a] &lt;= 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), 其中mmoney 的长度,pprice 的长度。 您可以通过对price 进行排序并使用二分搜索找到最高价格来获得O(p log p) + O(m * log p)

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2018-09-23
    • 2017-03-01
    • 2018-04-21
    • 1970-01-01
    • 2020-08-19
    • 2020-07-29
    • 1970-01-01
    • 2012-04-16
    相关资源
    最近更新 更多