为什么像 c 和 c++ 这样的程序比 java 程序使用更少的存储空间
why programs like c and c++ use less storage than java programs
我是大学生,更喜欢java.I知道核心c。问题是在许多编码竞赛中,如 codechef problem、spoj 等,大多数 c++ 中的编码器代码占用 2 或 3 MB 的存储空间,而在 java 中则为 1400 MB。例如存储两个长度为 pow(10,9) 的数组,然后根据两个数组中收集的数据执行特定操作占用大量内存 java。是否可以采用什么策略来优化代码?例如
注意:'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 日编辑
这是一个老问题,但是,我现在正在添加更多信息。
看下图:
即使在 610 页的第 124 页上,最成功的答案也是基于 c 或 c++ 等语言,因为它们占用的内存非常少。
但是,当我查看java解决方案时,它们获取的内存非常高。
根据@Peter的回答,很明显,如果我们将内存存储在长度为pow(10,9)的数组中,任何语言都会占用内存
两个 10^9 的数组在任何语言中都将使用 GB 的内存。例如2 * int[10^9] 需要 8 GB 内存,无论你使用 C 还是 Java.
真正的解决方案可能是根本不创建数组,因为它们似乎不需要。您可以在读取数据时对其进行处理。无论您使用 Java 还是 C.
,这将几乎不占用内存
我是大学生,更喜欢java.I知道核心c。问题是在许多编码竞赛中,如 codechef problem、spoj 等,大多数 c++ 中的编码器代码占用 2 或 3 MB 的存储空间,而在 java 中则为 1400 MB。例如存储两个长度为 pow(10,9) 的数组,然后根据两个数组中收集的数据执行特定操作占用大量内存 java。是否可以采用什么策略来优化代码?例如
注意:'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 日编辑 这是一个老问题,但是,我现在正在添加更多信息。 看下图:
即使在 610 页的第 124 页上,最成功的答案也是基于 c 或 c++ 等语言,因为它们占用的内存非常少。
但是,当我查看java解决方案时,它们获取的内存非常高。
根据@Peter的回答,很明显,如果我们将内存存储在长度为pow(10,9)的数组中,任何语言都会占用内存
两个 10^9 的数组在任何语言中都将使用 GB 的内存。例如2 * int[10^9] 需要 8 GB 内存,无论你使用 C 还是 Java.
真正的解决方案可能是根本不创建数组,因为它们似乎不需要。您可以在读取数据时对其进行处理。无论您使用 Java 还是 C.
,这将几乎不占用内存