每日一题(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;
}
相关推荐
星马梦缘6 分钟前
aaaaa
数据结构·c++·算法
OpenApi.cc25 分钟前
神经网络结构驱动+数据结构分析
数据结构·人工智能·神经网络
菜菜的顾清寒1 小时前
力扣HOT100(42)链表-随机链表的复制
算法·leetcode·链表
lqqjuly1 小时前
模型剪枝与稀疏化:理论、算法与可运行实现
人工智能·算法·剪枝
逻辑君1 小时前
Foresight研究报告【20260011】
人工智能·线性代数·算法·矩阵
珊瑚里的鱼1 小时前
【动态规划】不同路径Ⅱ
算法·动态规划
星恒随风1 小时前
C语言数据结构排序算法详解(下):冒泡排序、快速排序、归并排序和计数排序
c语言·数据结构·笔记·学习·排序算法
适应规律2 小时前
【无标题】
人工智能·python·算法
蒟蒻的贤2 小时前
关于文法G2算符优先分析的一个坑
算法
变量未定义~2 小时前
单调栈、单调队列(模板)、子矩阵、连通块中点的数量、堆箱子(4星)
算法