【发布时间】:2019-12-18 19:44:06
【问题描述】:
我在 Hackerrank 上遇到了这个问题。 https://www.hackerrank.com/challenges/playing-with-numbers/problem
给定一个整数数组,您必须回答多个查询。每个查询由一个整数 x 组成,执行如下:
- 将 x 添加到数组的每个元素中,为将来的任何查询永久修改它。
- 找出数组中每个元素的绝对值,并在新行上打印绝对值的总和。
我只需要完成下面的方法,
static int[] solution(int[] arr, int[] queries)
这里,arr 是包含 n 元素的数组
和queries 包含我需要与数组arr 的每个值相加的所有x,然后得到arr 元素的绝对和。所以结果数组将与数组queries 的大小相同,假设大小为m。该方法将返回一个由m 元素组成的数组。
下面是我的实现。
static int[] solution(int[] arr, int[] queries)
{
int[] result = new int[queries.length];
for (int i = 0; i < queries.length; i++)
{
int total = 0;
for (int j = 0; j < arr.length; j++)
{
arr[j] += queries[i];
if (arr[j] > 0)
total += arr[j];
else
total -= arr[j];
}
result[i] = total;
}
return result;
}
它工作正常,它的复杂度是 O(mn),但我需要用 O(nlog_m) 或 O(mlog_n) 或接近的复杂度来做。
【问题讨论】:
-
寻求帮助以优化当前工作的代码的问题通常更适合codereview.stackexchange.com。您可能需要考虑将您的问题迁移到那里。
-
一开始我在codereview.stackexchange.com上问过,有人说我在找新的实现,所以我应该在这里问。所以我把它删了,然后在这里问。
-
您可以将
arr的总和与queries中的整数总和一起保存在一个外部变量中 -
@azurefrog 并非如此,CR 不仅仅是一种优化。 OP 的代码不多,当需要完全重写时,没有必要让它变得更好。
标签: java performance time-complexity