摩根士丹利接受采访时提出的一个问题

时间:2011-03-21 03:14:45

标签: c++

有一个充满char元素的数组,你能建议一种最有效的方法来找到连续空白的最大长度吗?

4 个答案:

答案 0 :(得分:15)

从左到右扫描阵列,保持空白计数。当您到达非空白字符时,请检查该计数与当前最大值;如果它更高,它将成为新的最大值。跳过转发数组中的最大数字 - 如果不是空格,则表示间隔不能包含最大空格。否则,请向后搜索空格开始的位置 - 找到设置计数并继续从之前跳过的位置开始。

我认为最糟糕的情况是O(n),最好的情况是O(sqrt(n)),因为在每次跳过时有空格的sqrt(n)开头,后面跟着非空格point(导致重复跳到数组的末尾)。

答案 1 :(得分:3)

从左到右扫描数组,保持空白计数。当您到达非空白字符时,请检查该计数与当前最大值;如果它更高,它将成为新的最大值。将计数设置回零,继续扫描。这是O(n),你不能真的做得更好,因为你必须至少触摸一次这个元素。

答案 2 :(得分:0)

您无需扫描整个阵列。如果剩余数据小于当前最大空白区域,请继续检查剩余数据,然后停止扫描。

例如

1个空间2个空间空间3 4

在你来到3之后,你知道只剩下2个元素,并且那些元素小于你当前的最大空格(3)。

答案 3 :(得分:0)

char数组只不过是一个字符串。所以基本上你试图找到连续空间的最大长度。假设你的char数组是单维的,即单个字符串而不是字符串数组。

<div class="col-md-6">
<label for="martial_status">Martial Status</label>
<select name="martial_status" id="martial_status" class="form-control" value="<?php echo set_value('martial_status'); ?>">
   <option value="">Select Martial Status</option>
   <?php foreach ($martial_status as $status) { ?>
   <option value="<?php echo $status['id'] ?>"><?php echo $status['status_name'] ?></option>
   <?php } ?>
</select>