每日一题(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。因此,为res0分配一个整数的空间,并赋值为1。同时,设置returnColumnSizes0为1。

  3. 生成后续行:从第二行开始,遍历每一行。对于每一行i(从1开始),首先获取前一行i-1的数组m。然后,为新行i分配i+1个整数的空间,并初始化第一个和最后一个元素为1。接下来,通过遍历前一行m的元素,计算新行n的中间元素,每个元素nj都是mj-1和mj的和。最后,将新行n的指针赋给resi,并更新returnColumnSizesi为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 ,其中 answeri 等于 nums 中除 numsi 之外其余各元素的乘积 。

题目数据 保证 数组 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;
}
相关推荐
لا معنى له10 分钟前
World-In-World: World Models in a Closed-Loop World
算法
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出多任务下载器中的“独特下载速度“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Discipline10292 小时前
尼泊尔河流流量:天气驱动的预测与高流量风险
人工智能·算法
XuCoder3 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
算法
小羊没烦恼!3 小时前
在Scrum中实施敏捷建模
java·开发语言·windows·算法·c#
weixin_307779133 小时前
基于睿擎工业开发平台的预训练视觉模型轻量化适配与低代码部署优化
开发语言·算法
hold?fish:palm4 小时前
45 二叉树的右视图
开发语言·c++·算法
粤鼎恒业4 小时前
惠州工厂电子料回收厂家推荐:从交接单反推筛选标准
大数据·数据库·算法·硬件架构·硬件工程·pcb工艺·材料工程
小爷毛毛(卓寿杰)4 小时前
【Agent 意图识别】输出协议、评估与置信度
人工智能·算法·大模型·prompt·大语言模型·agent
优质酸酸乳4 小时前
力扣100题之21合并两个有序链表
算法·leetcode·链表