求数组中任意两个数据的最大差值

问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int seek_Max(int* p, int n) {
    int i, min;
    min = *p;
    int ret = *(p+ 1) - *p;
    for (i = 1; i < n; i++) {
        if (*(p + i) - min > ret) {
            ret = *(p + i) - min;
        }
        if (*(p + i) < min) {
            min = *(p + i);
        }
    }
    return ret;
}

int main() {
    int n, i, rt;
    scanf("%d", &n);
    int* p = (int*)malloc(sizeof(int) * n);
    if (!p) {
        return 0;
    }
    for (i = 0; i < n; i++) {
        scanf("%d", p + i);
    }
    rt = seek_Max(p, n);
    printf("%d", rt);
    free(p);
    p = NULL;
    return 0;
}

运行结果及报错内容

自己测试了很多次,答案都符合要求,但是不能通过刷题网站的检测,一直反馈答案错误

分别找出最大最小值就差不就行了么

int seek_Max(int* p, int n) {
    int i, min,max;
    min = max = p[0];
    for (i = 1; i < n; i++) {
        if(p[i] > max)
            max = p[i];
        if(p[i] < min)
            min  = p[i];
    }
    return max - min;
}


你的代码的问题在于:
min的值在for循环中一直不停的更新,那么就导致 if (*(p + i) - min > ret) 这个if语句中 得到的ret并不是真正的最小值,if语句中的min只是当前的最小值,而不是整个数组的最小值。
所以,需要先找出数组中的最大值和最小值,然后用最大值-最小值,得到的就是最大差值。
参考如下:

int seek_Max(int* p, int n) 
{
    int i,min,max;
    for (i=0;i<n;i++)
    {
        if(i==0)
        {
            max = p[0];
            min = p[0];
        }else
        {
            if(p[i]>max) max = p[i];
            if(p[i]<min) min = p[i];
        }
    }
    return (max-min);
}