五月集训(第01天)——数组

数组

1. 增量元素之间的最大差值

题目:

在这里插入图片描述
在这里插入图片描述

思路:
考虑到数据范围,O(n^2)暴力枚举

int maximumDifference(int* nums, int numsSize){
    if (numsSize <= 1) return -1;
    int maxn = -1;
    for (int i = 0; i < numsSize; i++) {
        for (int j = i + 1; j < numsSize; j++) {
            if (nums[i] < nums[j])
                maxn = maxn > nums[j] - nums[i] ? maxn : nums[j] - nums[i];
        }
    }
    return maxn;
}

2. 找到最接近 0 的数字

题目:
在这里插入图片描述
在这里插入图片描述

思路:
遍历数组,寻找最小的绝对值,维护正数和负数的符号位标记,最后判断整数符号位标记为1则返回正数结果,否则返回负数或 0 结果

int findClosestNumber(int* nums, int numsSize){
    int flag_neg = 0, flag_pos = 0;
    int ans = 1e5 + 10;
    for (int i = 0; i < numsSize; i++) {
        if (nums[i] == 0) {
            ans = 0;
            break;
        }
        if (ans >= abs(nums[i])) {
            if (nums[i] < 0 && ans != (-nums[i])) ans = -nums[i], flag_neg = 1, flag_pos = 0;
            else if (nums[i] > 0) ans = nums[i], flag_pos = 1;
        }
    }
    return flag_pos ? ans : (-ans);
}

3. 商品折扣后的最终价格

题目:
在这里插入图片描述
在这里插入图片描述

思路:
枚举寻找答案即可

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* finalPrices(int* prices, int pricesSize, int* returnSize){
    int *ret = (int *)malloc(sizeof(int) * pricesSize);
    for (int i = 0; i < pricesSize; i++) {
        ret[i] = prices[i];
        for (int j = i + 1; j < pricesSize; j++) {
            if (prices[i] >= prices[j]) {
                ret[i] = ret[i] - prices[j];
                break;
            }
        }
    }
    *returnSize = pricesSize;
    return ret;
}

4. 多个数组求交集

题目:
在这里插入图片描述

思路:
利用哈希表对应一下,每个值映射到一个统计值,mmap[ nums[i][j] ] ++,最后mmap[nums[i][j]] == 行数,则nums[i][j]是所有每一行的交集

注意开返回数组的时候,大小要和哈希表一致,我就这个点WA穿了

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* intersection(int** nums, int numsSize, int* numsColSize, int* returnSize){
    int* ret = (int *)malloc(sizeof(int) * 1010);
    int mmap[1010] = {0};
    for (int i = 0; i < numsSize; i++) {
        for (int j = 0; j < numsColSize[i]; j++) {
            mmap[nums[i][j]] ++;
        }
    }
    int cnt = 0;
    for (int i = 0; i < 1010; i++) if (mmap[i] == numsSize) ret[cnt++] = i;
    *returnSize = cnt;
    return ret;
}
posted @ 2022-05-03 12:01  番茄元  阅读(2)  评论(0)    收藏  举报