【說明】:
本文是左程雲老師所著的《程式設計師面試**指南》第一章中「最大值減去最小值小於或等於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/*2view code*檔名: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 }
注:
最大值減去最小值小於或等於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...