最近我遇到一个问题,说明有一个整数数组,我们将得到一个通配符号码。我们需要查看数组并形成一个子数组,以便
输出应返回此类子数组的长度。
示例问题: 如果数组为{4,5,6,4,3,2,4,8,2,4}且通配符号为4,则输出应为7.(因为子数组为{4},{4 },{3,2,4},{2,4})。
我已经写了问题的代码。但我需要知道的是,解决方案是否可以用O(n)时间复杂度编写。还有一种方法可以通过单独查看问题来找到最佳时间复杂度。
代码段:
private static void solution(int[] array, int k)
{
int forwardCounter = 0;
int backwardCounter = 0;
int length = 0;
while(forwardCounter != array.length)
{
if(array[forwardCounter] == k)
{
length++;
backwardCounter = forwardCounter - 1;
while(backwardCounter >= 0)
{
if(backwardCounter >= 0 && array[backwardCounter--] < k)
{
length++;
}
else
break;
}
}
forwardCounter++;
}
System.out.println(length);
}
public static void main(String[] args)
{
solution(new int[]{4,5,6,4,3,2,4,8,2,4}, 4);
}
答案 0 :(得分:1)
您的解决方案是线性的,但在最坏的情况下,您的阵列将被遍历两次。最糟糕的情况显然发生在
-array按升序排序
-wildcard number是数组的最后一个(即最大的)元素
可以修改您的解决方案以防止向后遍历并仅使用向前遍历。