为什么像c和c ++这样的程序比java程序使用更少的存储空间

时间:2015-01-03 21:45:18

标签: java c++

我是一名大学生,更喜欢java。我知道核心c。问题出现在许多编码竞争中,例如codechef problem,spoj等,c ++中的大多数编码器代码在java中存储2或3 MB相对1400 MB。例如,存储两个长度为pow(10,9)的数组,然后根据在两个数组中收集的数据执行某个操作,在java中占用大量内存。是否有可能采用任何策略来优化代码? e.g。

注意' n'的值的约束:1≤N≤pow(10,9)

public void solve(InputReader in, PrintWriter out) {
    try {
        int n = in.nextInt();
        int k = in.nextInt();
        int[] time = new int[n];
        int[] profit = new int[n];
        int res = 0;
        int max = 0;
        for (int i = 0; i < n; i++) {
            time[i] = in.nextInt();
            profit[i] = in.nextInt();
        }
        for (int i = 1; i < n; i++) {
            double v1 = ((int) k / ((time[max]))) * (profit[max]);
            double v2 = (((int) k / ((time[i]))) * (profit[i]));
            if (v1 < v2) {
                max = i;
            }
        }

        res = ((int) k / time[max]) * profit[max];
        out.println(res);

    } catch (Exception ex) {
        return;
    }
}

2017年8月24日编辑 这是一个老问题,但是,我现在正在添加更多信息。 请看下面的图片:

enter image description here

即使在610页的第124页,最成功的答案也是基于c或c ++等语言,因为它们获得的内存非常少。

然而,当我研究java解决方案时,他们获得的内存非常高。

java screenshot

根据@Peter的回答,很明显,如果我们将它存储在一个长度为pow(10,9)的数组中,内存将被任何语言占用

1 个答案:

答案 0 :(得分:3)

两个10 ^ 9的数组将使用任何语言的GB内存。例如2 * int [10 ^ 9]需要8 GB的内存,无论你使用的是C还是Java。

真正的解决方案可能是根本不创建数组,因为它们似乎并不需要。您可以在阅读时处理数据。无论您使用Java还是C,这都将使用无内存。