Skip to main content

995

1k8的hard题,忍住了没看答案,但是想了半天还是不会做,看了topics有queue然后眼前一亮做出来了。我总结了以下:

  1. 若以i为起点,那么i将不会再被改变。这意味着如果我们只经过一次的情况下,只能以nums[i] == 0i 作为起点。
  2. 以1作为起点,那么i后面k个数该怎么处理呢?在我没有想到queue之前想了很多种方法但worst case都是O(n2)O(n^2), 为什么用queue就可以O(n)O(n)呢?因为queue有先进先出的特点,这意味着我们在看i时可以通过判断queue的front来判断i是否在影响范围内。
  3. 紧接着2,我们还可以用queue的size来判断i会被影响几次,然后再结合1就可以贪心来得到答案