最近我遇到了一个问题,说明存在整数数组,我们将得到一个通配符。我们需要查看数组并形成一个子数组,这样
-
通配符应该是子数组的最后一个元素(即
:2,3,4如果4是通配符,则有效,但2,4,3无效)。
-
通配符之前的所有元素应小于
那。(即:2,3,4是有效的,如果4是通配符,但5,2,4
无效)。
-
不应在两个子数组之间组合通配符。
输出应返回此类子数组的长度。
示例问题:
如果数组是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);
}