【每日刷题】Day50

【每日刷题】Day50

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

[1. 654. 最大二叉树 - 力扣(LeetCode)](#1. 654. 最大二叉树 - 力扣(LeetCode))

[2. 119. 杨辉三角 II - 力扣(LeetCode)](#2. 119. 杨辉三角 II - 力扣(LeetCode))

[3. 735. 小行星碰撞 - 力扣(LeetCode)](#3. 735. 小行星碰撞 - 力扣(LeetCode))

1. 654. 最大二叉树 - 力扣(LeetCode)

//思路:递归遍历,通过不断改变左右区间找到最大值,从而保证在最大值左边构建子树以及最大值右边构建子树。

typedef struct TreeNode TN;

TN* CreatBinaryTree(int* nums,int left,int right)

{

if(left>right)//当区间不存在时,说明已经没有值能找了,直接返回NULL

return NULL;

int max = left;

for(int i = left;i<=right;i++)

{

if(numsi>numsmax)//定位当前最大值的下标,作为下一次寻找左右最大结点的区间

{

max = i;

}

}

TN* node = (TN*)malloc(sizeof(TN));

node->val = numsmax;

node->left = CreatBinaryTree(nums,left,max-1);

node->right = CreatBinaryTree(nums,max+1,right);

return node;

}

struct TreeNode* constructMaximumBinaryTree(int* nums, int numsSize)

{

return CreatBinaryTree(nums,0,numsSize-1);

}

2. 119. 杨辉三角 II - 力扣(LeetCode)

//思路:构建杨辉三角。

int* getRow(int rowIndex, int* returnSize)

{

int** arr = (int**)malloc(sizeof(int*)*34);

for(int i = 0;i<34;i++)

{

arri = (int*)malloc(sizeof(int)*35);

}

for(int i = 0;i<34;i++)

{

arri0 = 1;

arrii = 1;

}

for(int i = 2;i<34;i++)

{

for(int j = 1;j<i;j++)

{

arrij = arri-1j-1+arri-1j;

}

}

int* ans = (int*)malloc(sizeof(int)*34);

int count = 0;

for(int i = 0;i<rowIndex+1;i++)

{

anscount++ = arrrowIndexi;

}

*returnSize = count;

return ans;

}

3. 735. 小行星碰撞 - 力扣(LeetCode)

//思路:栈。遍历数组,入栈情况: ① 如果栈中没有元素则入栈 ② 如果数组当前元素>0,则不可能发生碰撞,入栈 ③ 如果栈顶元素<0并且数组当前元素也<0,入栈

出栈情况: 如果栈顶元素>0并且数组当前元素<0,则要判断是否出栈。① 如果数组当前元素的绝对值>栈顶元素,则将栈顶元素替换为当前数组元素,并继续跟栈顶下一个元素比较

② 如果数组当前元素的绝对值=栈顶元素,则直接将栈顶元素出栈,不进行入栈操作

③ 如果数组当前元素的绝对值<栈顶元素,则不进行操作。

注意:这里需要考虑到当 是第①种出栈情况时,需要考虑到栈顶下面元素也为负数,或者栈的下标为0的情况。

int* asteroidCollision(int* asteroids, int asteroidsSize, int* returnSize)

{

int* ans = (int*)malloc(sizeof(int)*10000);

int count = 0;

for(int i = 0;i<asteroidsSize;i++)

{

if(count==0||asteroidsi>0||(asteroidsi<0&&anscount-1<0))//入栈情况

{

anscount++ = asteroidsi;

}

else

{

while(count&&(asteroidsi*(-1))>anscount-1&&anscount-1>0)//当前数组元素的绝对值大于栈顶元素,并且栈顶元素必须>0才能发生碰撞

{

ans--count = asteroidsi;

}

if(count==0||(asteroidsi<0&&anscount-1<0))//考虑到 10 5 -15 这种一路碰撞到栈下标为0或者栈顶下面元素都为负数的情况,需要将返回大小+1

{

count++;

}

if(count&&(asteroidsi*(-1))==anscount-1)//如果当前数组元素绝对值与栈顶元素相同,则同归于尽

{

count--;

}

}

}

*returnSize = count;

return ans;

}

相关推荐
Shimeri7 分钟前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J30 分钟前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang30 分钟前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
知识分享小能手40 分钟前
C学习教程,从入门到精通,C语言学生信息管理系统 — 知识点详解(18)
c语言·学习·1024程序员节
爱读书的小胖1 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy1 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化
上班摸鱼下班游戏1 小时前
Unity 仿生智能算法 从蚁群算法 开始
算法·unity·游戏引擎
pipixia200331 小时前
C++ 面试高频:namespace 的 6 个知识点,从 using 到匿名命名空间
c语言·学习·算法·嵌入式·命名空间·c++面试·匿名命名空间
舰长1151 小时前
将百万数据插入到 Redis,有哪些实现方案?
数据结构·redis·开源
Navigator_Z2 小时前
LeetCode //C - 1300. Sum of Mutated Array Closest to Target
c语言·算法·leetcode