leetcode第191场周赛

题目传送门

5424. 数组中两元素的最大乘积

直接暴力法求解,注意避开index1 == index2;
或者排序后找最大的两位;

int compare(const void *p1, const void *p2) {
    // return (*(int *)p1) - (*(int *)p2);  // 升序排序
    return (*(int *)p2) - (*(int *)p1);  // 降序排序
}
int maxProduct(int* nums, int numsSize){
    qsort(nums,numsSize,sizeof(int),compare);
    return (nums[0] - 1) * (nums[1] - 1);
}

5425. 切割后面积最大的蛋糕

按照位置数组找到相邻位置之间的长度,排序后计算该数组并找到最长边,相乘为面积。

#define max(x, y) (x > y ? x : y)
int compare(const void *p1, const void *p2) {
    return (*(int *)p1) - (*(int *)p2);  // 升序排序
    // return (*(int *)p2) - (*(int *)p1);  // 降序排序
}
long calMaxDelta(int *arr, int x, int size) {
    long maxDelta = 0;
    long *delta = (long *)malloc(sizeof(long) * (size + 1));
    for (int i = 0; i <= size; i++) {
        if (i == 0) {
            delta[i] = arr[0];
        }
        if (i == size) {
            delta[i] = x - arr[i - 1];
        }
        if (i > 0 && i < size) {
            delta[i] = arr[i] - arr[i - 1];
        }
        maxDelta = max(maxDelta, delta[i]);
    }
    free(delta);
    printf("%d\n",maxDelta);
    return maxDelta;
}
int maxArea(int h, int w, int *horizontalCuts, int horizontalCutsSize, int *verticalCuts, int verticalCutsSize) {
    qsort(horizontalCuts, horizontalCutsSize, sizeof(int), compare);
    qsort(verticalCuts, verticalCutsSize, sizeof(int), compare);

    long maxH = calMaxDelta(horizontalCuts, h, horizontalCutsSize);
    long maxV = calMaxDelta(verticalCuts, w, verticalCutsSize);
    return (int)((maxV * maxH) % 1000000007);
}