最大值減去最小值小於或等於num的子陣列數量

2022-04-06 00:07:45 字數 1274 閱讀 3608

【說明】:

本文是左程雲老師所著的《程式設計師面試**指南》第一章中「最大值減去最小值小於或等於num的子陣列數量」這一題目的c++復現。

感謝左程雲老師的支援。

【題目】:

給定陣列 arr 和整數 num,共返回多少個字陣列滿足如下情況:

max(arr[i...j]) - min(arr[i...j]) <= num

max(arr[i...j]) 表示字陣列 arr[i...j] 中的最大值,min(arr[i...j]) 表示子陣列 arr[i...j] 中的最小值。

【思路】:

1、若 arr[i...j] 滿足條件,那麼其子陣列也會滿足條件;

2、若 arr[i...j] 不滿組條件,那麼包含arr[i...j]的陣列都不滿足條件;

【編譯環境】:

centos6.7(x86_64)

gcc 4.4.7

【實現】:

實現及測試**:

1/*2

*檔名:getsatisfiedsubarrnum.cpp34

*摘要:找到滿足條件的子陣列的數量5*/

67 #include 8 #include 9

10using

namespace

std;

1112

int getnum(int arr,int len,int

num)

1336 res += j-i; //

記錄當前序列中滿足要求的字陣列數量

3738

if(qmin.front() ==i)

39qmin.pop_front();

40if(qmax.front() ==i)

41qmax.pop_front();

42 i++; //

下移 43}

44return

res;45}

4647

intmain()48;

50 cout << "

the number of sub arrays to meet the requirements is:

"<< getnum(a,8,4)<

5152

return0;

53 }

view code

注:

最大值減去最小值小於或等於num的子陣列數量

給定陣列arr和整數num,共返回有多少個子陣列滿足如下情況 max arr i j min arr i j num mar arr i j 表示陣列arr i j 中的最大值,min arr i j 表示子陣列arr i j 中的最小值。如果陣列長度為n,請事先時間複雜度為 o n 的解法。具體思...

最大值減去最小值小於或等於num的子陣列的數量

給定陣列arr和整數num,返回共有多少個子陣列滿足如下情況 max arr i.j min arr i.j num 要求 o n 實現。思路 使用兩個有序佇列 相對於有序棧來命名 qmax和qmin,分別維護arr i.j 的最大值和最小值更新結構。當子陣列a i.j 向右滑動乙個位置變成arr ...

最大值減去最小值小於或等於num的子陣列數量

給定陣列 arr 和整數 num,共返回有多少個子陣列滿足如下情況 max arr i j min arr i j num max arr i j 表示子陣列arr i j 中的最大值,min arr i j 表示子陣列arr i j 中的最小值。輸入描述 第一行輸入兩個數 n 和 num,其中 n...