【发布时间】:2018-09-26 08:40:59
【问题描述】:
我试图在 O(n) 时间复杂度的数组中找到最大连续 1 数,并且不使用超过一个单位的空间。(除了用于遍历数组的变量)。这是我想出的代码,但 Leetcode 提交显示它超过了时间限制。我很难理解它是如何超过时间限制的,因为我只迭代数组的每个元素一次并在同一次迭代中运行逻辑。
public class MaxConsecutive {
public static void main(String[] args) {
System.out.println(findMaxConsecutiveOnes(new int[] {0,1,0,0,0,0,1,1,1}));
}
public static int findMaxConsecutiveOnes(int[] nums) {
int i=0, j=0, maxLen=0;
while(j<nums.length) {
if(nums[j] == 1) {
i=j;
while (true) {
while (j < nums.length && nums[j] == 1) {
j++;
}
if( j - i > maxLen) {
maxLen = j - i;
j++;
break;
}
}
}
else
j++;
}
return maxLen;
}
}
【问题讨论】:
-
嗯,我可以看到三个
while循环 -
是的,你为什么需要不止一个?
-
是的,确实有 3 个 while 循环,但它只遍历数组一次。我同意这不是最好的解决方案,但这是我想到的第一个解决方案。