关于#连号区间数#的问题,如何解决?

连号区间数

img


输入样例1:
4
3 2 4 1
输出样例1:
7
输入样例2:
5
3 4 2 5 1
输出样例2:
9
输入样例3:
20
9 3 16 6 12 8 4 19 18 2 1 14 7 5 17 20 10 11 13 15
输出样例3:
24

#include
#include
#include
using namespace std;
int n;
const int N = 10010;
int a[N];
int main() {
    scanf_s("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf_s("%d", &a[i]);
    }
    int max=0, min=0,res=0;
    for (int i = 0; i for (int j = i; j for (int k = i; k < j - i + 1; k++) {
                max = a[k] > max ? a[k] : max;
                min = a[k] < min ? a[k] : min;
            }
            if ((max - min) == (j - i)) {
            res++;
            //printf("%d %d\n", i,j);
            }
        }
    }
    printf("%d", res);
    return 0;
}

//样例3不过

#include
#include
#include
using namespace std;
const int N = 10010;
int n;
int a[N];
int main() {
    scanf_s("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf_s("%d", &a[i]);
    }
    int res = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {//双重循环,所有可能的区间
            sort(&a[i], &a[j]);//[i,j]
            bool flag = true;
            for (int k = i; k < j - i; k++) {//k < j - i//见图
                if (a[k+1] == a[k] + 1) flag = true;
                else flag = false;
            }
            if (flag == true) {
             res++;
             //printf("%d %d\n", i,j);
            }
                
        }
    }
    printf("%d", res);
    return 0;
}

img

//整体错误
求问:两种做法错哪了,怎么改?

这些数据是乱序的,第一段程序里排序都没有