我在CodeChef(https://www.codechef.com/problems/SUBINC)上遇到了一个问题,该问题是对严格不减少的子数组进行计数。尽管多次阅读了说明,但我仍无法理解我的预期。
我主要遇到以下两个问题:
1)*“所有有效的子数组为A [1、1],A [1、2],A [2、2],A [3、3],A [3、4],A [4、4]。 “ *
如果子数组为1 4 2 3,那么A [2,2]; A [3,3]; A [3,4];和A [4,4]如何有效?(鉴于它是非递减的仅当前向元素按降序排列时)为什么A [1,1]有效?
2)“仅单个子数组A [1,1]不减少。”
这里有类似的问题。如果数组本身只有1,那么如何计算A [1,1]是子数组呢?
也许我完全没有意识到应该做些什么,因为这个问题已经被许多人解决了,但是一定会有所帮助。
P.S我用Java编写代码,而对C则不太熟悉,所以这就是为什么我看不懂大多数提交内容的原因。
最佳答案
好,你有四个数字组成的数组1 4 2 3
符号A[i, j]
表示:“将数组的所有元素从索引i
移到索引j
。”A[1,2]
将代表一个子数组:1 4
A[1,3]
将代表一个子数组:1 4 2
A[1,4]
将是整个数组:1 4 2 3
而且数组的任何单个元素也是子数组,
因此,当我们说A[1,1]
时,这意味着我们需要从索引1
到索引1
的元素,所以它只是一个数字:1
(因此A[2,2]
是4
,依此类推)。Non-decreasing
表示数组的下一个元素不能小于前一个。因此,一个单元素数组始终是不递减的,它中的下一个元素就不存在(因此它不能少于它)。