8-7 leetcode

先判断数据是否合法

利用双层循环 对二维数组进行赋值

int** construct2DArray(int* original, int originalSize, int m, int n, int* returnSize, int** returnColumnSizes){
    if (m * n != originalSize) { /* 不能转换的情况 */
        *returnSize = 0;
        return NULL;
    }

    int **res = (int**)malloc(sizeof(int*) * m);
    *returnColumnSizes = (int*)malloc(sizeof(int) * m);

    /* 生成二维数组m*n */
    for (int i = 0; i < m; i++) {
        res[i] = malloc(sizeof(int) * n);
        (*returnColumnSizes)[i] = n;
        for (int j = 0; j < n; j++) {
            res[i][j] = original[i * n + j];
        }
    }
    *returnSize = m;
    return res;
}

使用双循环先对每一个元素进行数量统计【此题条件特殊,

1 <= nums.length <= 1000
1 <= sum(nums[i].length) <= 1000
1 <= nums[i][j] <= 1000;nums[i] 中的所有值 互不相同

再次使用双循环将数量为numssize的数字挑出来【这个过程是升序添加的】

int* intersection(int** nums, int numsSize, int* numsColSize, int* returnSize){
    int array[1001] = {0};

    for(int i=0; i<numsSize; i++){
        for(int j=0; j<numsColSize[i]; j++){
            array[nums[i][j]] += 1;
        }
    }

    int idx = 0;
    int array2[1001] = {0}; 
    for(int i=1; i<=1000;i++){
        if(array[i] == numsSize){
            array2[idx++] = i;
        }
    }

    int* result = (int*)malloc( sizeof(int)* (idx) );

    for(int i=0; i<idx; i++){
        result[i] = array2[i];
    }

    *returnSize = idx;

    return result;
}

 遍历一遍loss,标记出生与死亡年份

再按年份升序遍历,当年出生累加去年人口减去死亡人口计算当下人口

int maximumPopulation(int** logs, int logsSize, int* logsColSize){
    int arr[2051];
    int max = 0;
    memset(arr, 0, sizeof(arr));
    for (int i = 0; i < logsSize; i++) {
        arr[logs[i][0]]++;
        arr[logs[i][1]]--;
    }
    for (int i = 1950; i <= 2050; i++) {
        arr[i] += arr[i - 1];
        if (arr[i] > arr[max]) {
            max = i;
        }
    }
    return max;
}

 

开辟一个结构相同的数组

双层循环遍历,直接计算当前坐标移动k后的位置并复制

int** shiftGrid(int** grid, int gridSize, int* gridColSize, int k, int* returnSize, int** returnColumnSizes){
    *returnSize = gridSize;
    *returnColumnSizes = (int *)calloc(gridSize, sizeof(int));
    int i, j, n = *gridColSize, x, y;
    int **map = (int **)calloc(gridSize, sizeof(int *));
    for(i = 0; i < gridSize; i++) map[i] = (int *)calloc(n, sizeof(int));

    for(i = 0; i < gridSize; i++){
        (*returnColumnSizes)[i] = n;
        for(j = 0; j < n; j++){
            y = (j + k) % n;  
            x = (i + (j + k) / n) % gridSize; 
            map[x][y] = grid[i][j];
        }
    }

    return map;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑驴_找马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值