小明拿到乙個數列a1,a2,…an,小明想知道存在多少個區間[l,r]同時滿足下列兩個條件:
r - l + 1 = k;輸出滿足條件的區間個數。在al,al+1,…ar中存在乙個數至少出現t次
輸入:
輸入一行三個整數 n,k,t(1<=n,k,t<=10^5).樣例輸入:第二行n個整數,a1,a2,…an(1<=ai<=10^5).
5 3 2樣例輸出: hint3 1 1 1 2
區間[1,3]中1出現了2次,區間[2,4]中1出現了3次,區間[3,5]中1出現了2次,使用一共有3個區間滿足條件其實就是找乙個給定大小區間中某元素出現次數》=t,這個查詢得方法有很多
1.暴力解法,雙重迴圈
2.可以先區間元素排序,之後使用兩個指標,一次遍歷就可以找到結果
3.還可以使用雜湊表,使用stl中的map,分別統計每個數字出現的次數,之後找出最多的數就可以了,只需要兩次遍歷。
方法一:
#include
#include
using
namespace
std;
int main()
int count=0;
for(int i=0;i1;++i)
if(maxif(max>=t)
++count;
cout
0;}
方法二:
#include
#include
#include
using
namespace
std;
int getnumberofk(vector
& number)
;int size = number.size();
int left = 0,right = 0;
int max = 0;
while(left int num = number[left];
while(right < size && number[right] == num)++right;
if(right - left>max)
max = right - left;
left = right;
}return max;
}int main()
int count=0;
for(int i=0;i1;++i)
方法三:
#include
#include
#include
#include
using
namespace
std;
int findmax(vector
& num)
int max=0;
for(auto& time:times)
int main()
int count=0;
for(int i=0;i1;++i)
其中方法一比較容易想到,只是時間複雜度o(n^2),複雜度比較大。
方法二比較麻煩,需要兩個指標,乙個指向相同元素的第乙個數,另外乙個指向相同元素的最後乙個數的後面乙個位置,通過比較兩個指標距離可以得到次數。
方法三如果熟悉map也比較容易,時間複雜度是o(n),實際是2n,使用了乙個輔助空間。
美團2019校招 程式設計
說給了一張包含個n個點n 1條邊的無向連通圖,節點從1到n編號,每條邊長度均為1,設你從1號節點出發並打算遍歷所有節點,那麼總路程至少是多少?輸入 第一行包含乙個整數n,接下來n 1行,每行包括兩個整數x,y表示x與y之間有一條邊 輸出 總路程最小和 樣例 4 1 21 3 3 4輸出 4 incl...
2018美團點評校招 K的倍數
序列中任意個連續的元素組成的子串行被稱為該序列的字串 現在給你乙個序列p和乙個整數k,詢問元素和是k的倍數的子串的最大長度 比如序列,給定的整數k為5,其中滿足條件的子串為 那麼答案就為5,因為最長的子串為 如果滿足條件的子串不存在,就輸出0 輸入 第乙個含乙個整數n,1 n 10 5 第二行包含n...
2018美團點評春招C 試卷程式設計題
美團點評 2018 春招後台開發方向試卷 程式設計題 30.0分1 2 字串距離 時間限制 c c 語言2000ms 其他語言 4000ms 記憶體限制 c c 語言65536kb 其他語言 589824kb 題目描述 給出兩個相同長度的由字元a 和 b 構成的字串,定義它們的距離為對應位置不同的字...