每日一题(4.20)

目录

Leecode-118-杨辉三角

题目

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例

示例1

输入: numRows = 5

输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例2

输入: numRows = 1

输出: [[1]]

解题思路

  1. 分配空间:根据numRows的值,为二维数组res分配空间,并初始化returnSize为numRows。同时,为returnColumnSizes分配空间,用于存储每一行的列数。

  2. 初始化第一行:杨辉三角的第一行总是只有一个元素1。因此,为res[0]分配一个整数的空间,并赋值为1。同时,设置returnColumnSizes[0]为1。

  3. 生成后续行:从第二行开始,遍历每一行。对于每一行i(从1开始),首先获取前一行i-1的数组m。然后,为新行i分配i+1个整数的空间,并初始化第一个和最后一个元素为1。接下来,通过遍历前一行m的元素,计算新行n的中间元素,每个元素n[j]都是m[j-1]和m[j]的和。最后,将新行n的指针赋给res[i],并更新returnColumnSizes[i]为i+1。

  4. 返回结果:最后,返回二维数组res的指针。

代码实现

c 复制代码
/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** generate(int numRows, int* returnSize, int** returnColumnSizes) {
    int** res = (int**) malloc(sizeof(int*) * numRows);
    *returnSize = numRows;
    *returnColumnSizes = (int*) malloc(sizeof(int) * numRows);
    res[0] = (int*) malloc(sizeof(int) * 1);
    (*returnColumnSizes)[0] = 1;
    res[0][0] = 1;
    for (int i = 1; i < numRows; i++) {
        int* m = res[i - 1];
        int* n = (int*) malloc(sizeof(int) * (i + 1));
        (*returnColumnSizes)[i] = i + 1;
        n[0] = 1;
        for (int j = 1; j < i; j++) {
            n[j] = m[j - 1] + m[j];
        }
        n[i] = 1;
        res[i] = n;
    }
    return res;
}

Leecode-238-除自身以外数组的乘积

题目

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例

示例1

输入: nums = [1,2,3,4]

输出: [24,12,8,6]

示例2

输入: nums = [-1,1,0,-3,3]

输出: [0,0,9,0,0]

解题思路

  1. 创建一个结果数组 res,并将第一个元素初始化为 1
  2. 从左到右遍历数组,记录左侧元素的乘积
  3. 从右到左遍历数组,记录右侧元素的乘积
  4. 返回结果数组 res

代码实现

c 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
    int *res = (int *)malloc(sizeof(int)* numsSize);
    *returnSize = numsSize;
    res[0] = 1;
    for(int i = 1; i < numsSize; i++){
        res[i] = res[i - 1] * nums[i - 1];
    }
    int flag = 1;
    for(int i = numsSize - 1; i >= 0; i--){
        res[i] *= flag;
        flag *= nums[i];
    }
    return res;
}
相关推荐
细节处有神明4 分钟前
开源数据之历史气象数据的获取与使用
人工智能·python·算法
小白开始进步11 分钟前
JAKA Zu12 机械臂运动学算法深度解析(含可视化方案)
python·算法·numpy
梵刹古音32 分钟前
【C语言】 递归函数
c语言·数据结构·算法
yongui4783441 分钟前
混凝土二维随机骨料模型 MATLAB 实现
算法·matlab
酉鬼女又兒1 小时前
JAVA牛客入门11~20
算法
代码游侠1 小时前
C语言核心概念复习(二)
c语言·开发语言·数据结构·笔记·学习·算法
XX風1 小时前
2.1_binary_search_tree
算法·计算机视觉
不想写bug呀1 小时前
买卖股票问题
算法·买卖股票问题
-Try hard-1 小时前
完全二叉树、非完全二叉树、哈希表的创建与遍历
开发语言·算法·vim·散列表
you-_ling2 小时前
数据结构:5.哈希表
数据结构·散列表