我最近参加了编码测试的编程测试,问题是在数组中找到有界切片的数量.
我只是简单地向你解释这个问题.
如果Max(SliceArray)-Min(SliceArray)<= K,则称一个数组的切片为有界切片.
如果Array [3,5,6,7,3]和K = 2提供..有界切片的数量是9,
数组中的第一个切片(0,0)Min(0,0)= 3 Max(0,0)= 3 Max-Min <= K结果0 <= 2因此它是有界切片
数组中的第二个切片(0,1)Min(0,1)= 3 Max(0,1)= 5 Max-Min <= K结果2 <= 2所以它是有界切片
数组中的第二个切片(0,2)Min(0,1)= 3 Max(0,2)= 6 Max-Min <= K结果3 <= 2因此它不是有界切片
通过这种方式你可以发现有九个有界切片.
(0,0),(0,1),(1,1),(1,2),(1,3),(2,2),(2,3),(3,3),(4) ,4).
以下是我提供的解决方案
private int FindBoundSlice(int K, int[] A)
{
int BoundSlice=0;
Stack<int> MinStack = new Stack<int>();
Stack<int> MaxStack = new Stack<int>();
for (int p = 0; p < A.Length; p++)
{
MinStack.Push(A[p]);
MaxStack.Push(A[p]);
for (int q = p; q < A.Length; q++)
{ …Run Code Online (Sandbox Code Playgroud) algorithm ×1