我一直在尝试Codility.com的编码挑战,这是我尝试的问题之一:
给出一个由 N 个整数组成的非空零索引数组 A。一对整数 (P, Q),使得 0 ≤ P
例如,数组A如下:
A[0] = 4
A[1] = 2
A[2] = 2
A[3] = 5
A[4] = 1
A[5] = 5
A[6] = 8
包含以下示例切片:
切片 (1, 2),其平均值为 (2 2) / 2 = 2;切片 (3, 4),其平均值为 (5 1) / 2 = 3;切片 (1, 4),其平均值为 (2 2 5 1) / 4 = 2.5。目标是找到平均值最小的切片的起始位置。
写一个函数:
class Solution { public int Solution(int[]A);}
如果给定一个由N个整数组成的非空零索引数组a,则以最小平均值返回切片的起始位置。如果有多个切片具有最小平均值,则应返回此类切片的最小起始位置。
例如,给定数组A,使得:
A[0] = 4
A[1] = 2
A[2] = 2
A[3] = 5
A[4] = 1
A[5] = 5
A[6] = 8
该函数应返回 1,如上所述。
我已经提交了我的答案,得到了60%。我的解决方案是正确的,并且我通过了所有的测试案例。我之所以得到60%是因为时间复杂度。我的解决方案运行大型测试用例的时间太长。
这是我在Java中的解决方案:
class Solution {
public int solution(int[] A) {
int size = A.length;
if (size == 2) {
return 0;
}
int sizeLessOne = size - 1;
int start = 0;
double min = 0;
boolean isFirst = true;
for (int i = 0; i < sizeLessOne; i++) {
int val1 = A[i];
for (int j = i + 1; j < size; j++) {
int val2 = A[j];
double avg = ((double) val1 + val2) / (j - i + 1);
if (isFirst || avg < min) {
min = avg;
start = i;
if (isFirst) {
isFirst = false;
}
}
val1 += val2;
}
}
return start;
}
}
public class SolutionRunner {
public static void main(String[] args) {
Solution s = new Solution();
int[] A = {4,2,2,5,1,5,8};
System.out.println(s.solution(A));
}
}
根据我的代码,由于嵌套的for循环,我最差的时间复杂度是O(N^2).O(N)上的预期最坏情况。我不确定如何实现这一点。
先谢谢你。
您可以在O(n)
中执行此操作,因为始终存在大小为2或3的最佳子数组。
假设您有一个大小为n的最优子数组
给定一个非空字符串s和一个包含非空单词列表的字典字词,确定s是否可以被分割成一个或多个字典单词的空格分隔序列。您可以假定字典不包含重复的单词。 例如,给定s=“leetcode”,dict=[“leet”,“code”]。 返回true,因为“leetcode”可以分段为“leetcode”。 朴素解给出如下: 时间复杂度被列为O(n^n),因为这是递归树的大小。我完全同意递归树的最后一层有n^n
有一个与数组相关的问题,要求是时间复杂度为O(n),空间复杂度为O(1)。 如果我使用< code>Arrays.sort(arr),并使用< code>for循环进行一次循环,例如: } 所以循环将花费O(n)时间。我的问题是:< code>Arrays.sort()会花费更多时间吗?如果我使用< code>Arrays.sort(),这个时间复杂度还是O(n)吗?< code>Arrays.s
我找不到关于它的任何信息,所以我希望你能帮助我。问题是关于for循环中嵌套的else-ifs和时间复杂度计算。 我拥有的一般代码是: 若为O(1),则每个(___)都是复杂度。我遇到的问题是,由于else和嵌套的if-else,我一直对如何计算非简化的big-O复杂度感到困惑。是O(n*1 1 1 1)吗?或者可能是O(n*1 1*(1 1))?我该怎么做呢?
主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内
这段代码的时间复杂度是多少?外循环运行n次,但我不确定内循环。如果内环对于i的每个值一直运行到n,它能是O(n^2)吗?