私はこの問題を解決しようとしていました。
整数 M と、N 個の非負の整数からなる空でないゼロ インデックスの配列 A が与えられます。配列 A のすべての整数は M 以下です。
0 ≤ P ≤ Q < N となる整数のペア (P, Q) は、配列 A のスライスと呼ばれます。スライスは、要素 A[P]、A[P + 1]、...、 A[Q]。個別のスライスは、一意の番号のみで構成されるスライスです。つまり、個々の番号がスライス内で複数回出現することはありません。
たとえば、次のような整数 M = 6 と配列 A を考えてみましょう。
A[0] = 3 A[1] = 4 A[2] = 5 A[3] = 5 A[4] = 2
(0, 0)、(0, 1)、(0, 2)、(1, 1)、(1,2)、(2, 2)、(3, 3)、( 3, 4) および (4, 4)。
目標は、個別のスライスの数を計算することです。
前もって感謝します。
#include <algorithm>
#include <cstring>
#include <cmath>
#define MAX 100002
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
using namespace std;
bool check[MAX];
int solution(int M, vector<int> &A) {
memset(check, false, sizeof(check));
int base = 0;
int fibot = 0;
int sum = 0;
while(fibot < A.size()){
if(check[A[fibot]]){
base = fibot;
}
check[A[fibot]] = true;
sum += fibot - base + 1;
fibot += 1;
}
return min(sum, 1000000000);
}