问题是:给定一个2n个整数的数组,你的任务是将这些整数分组为n对整数,比如(a1,b1),(a2,b2),...,(an,bn),这使得从1到n的所有i的min(ai,bi)之和尽可能大。
提供的解决方案如下:
public class Solution {
public int arrayPairSum(int[] nums) {
int[] arr = new int[20001];
int lim = 10000;
for (int num: nums)
arr[num + lim]++;
int d = 0, sum = 0;
for (int i = -10000; i <= 10000; i++) {
sum += (arr[i + lim] + 1 - d) / 2 * i;
d = (2 + arr[i + lim] - d) % 2;
}
return sum;
}
}
我认为说时间复杂度是O(n)是不公平的。虽然 O(n+K) K = 20001 是一个常数,似乎可以省略,但 n 也小于 K。如果是这样,为什么我不能说时间复杂度是O(1)?
繁星淼淼
相关分类