当前位置: 首页 > article >正文

力扣9.2

199.二叉树的右视图

题目

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

数据范围
  • 二叉树的节点个数的范围是 [0,100]
  • -100 <= Node.val <= 100
分析

树的层次遍历,每次返回那一层最边上的元素,可以使用两个deque实现

代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    deque<TreeNode*> tmp, ve;
    vector<int> res; 
    void bfs(TreeNode* q) {
        ve.push_back(q);
        while(ve.size()) {
            tmp = ve;
            res.push_back(ve.back()->val);
            ve.clear();
            while(tmp.size()) {
                auto now = tmp.front();
                tmp.pop_front();
                auto l = now -> left, r = now -> right;
                if(l != nullptr) ve.push_back(l);
                if(r != nullptr) ve.push_back(r);
            }
        }
    }
    vector<int> rightSideView(TreeNode* root) {
        if(root == nullptr) return res;
        bfs(root);
        return res;
    }
};

637.二叉树的层平均值

题目

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

数据范围
  • 树中节点数量在[1, 104] 范围内
  • -2^31 <= Node.val <= 2^31 - 1
分析

使用两个vector实现树的层次遍历

代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<TreeNode*> tmp1, tmp2;
    vector<double> res;
    void bfs(TreeNode* p) {
        tmp2.push_back(p);
        while(tmp2.size()) {
            tmp1 = tmp2;
            tmp2.clear();
            double ave = 0;
            double cnt = 0;
            while(tmp1.size()) {
                auto now = tmp1.back();
                ave += now -> val;
                cnt += 1;
                tmp1.pop_back();
                auto l = now -> left, r = now -> right;
                if(l != nullptr) tmp2.push_back(l);
                if(r != nullptr) tmp2.push_back(r);
            }
            res.push_back(ave / cnt);
        }
    } 
    vector<double> averageOfLevels(TreeNode* root) {
        bfs(root);
        return res;
    }
};

2110.股票平滑下跌阶段的数目

题目

给你一个整数数组 prices ,表示一支股票的历史每日股价,其中 prices[i] 是这支股票第 i 天的价格。

一个 平滑下降的阶段 定义为:对于 连续一天或者多天 ,每日股价都比 前一日股价恰好少 1 ,这个阶段第一天的股价没有限制。

请你返回 平滑下降阶段 的数目。

数据范围
  • 1 <= prices.length <= 105
  • 1 <= prices[i] <= 105
分析

对于price[i],他对答案的贡献是他且在他前面的平滑下降的序列的长度,例如对于 874321这样的序列,当遍历到1时,他的贡献为4321321211四个,因此只要找到当前数所在的平滑下降的序列,计算贡献加入答案即可

代码
class Solution {
public:
    long long getDescentPeriods(vector<int>& prices) {
        long long res = 0;
        long long cnt = 0;
        for(int i = 0; i < prices.size(); i ++ ) {
            if(i && prices[i] != prices[i - 1] - 1) {
                cnt = 0;
            }
            res += ++ cnt;
        }
        return res;
    }
};

http://www.kler.cn/a/289714.html

相关文章:

  • 应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片
  • 贪心算法入门(二)
  • springboot 之 整合springdoc2.6 (swagger 3)
  • 多叉树笔记
  • 使用 Sparkle 实现 macOS 应用自定义更新弹窗
  • 【Linux】进程池实现指南:掌控并发编程的核心
  • iscntrl函数讲解 <ctype.h>头文件函数
  • 运动耳机怎么选购?解密最值得购买的五大品牌!
  • 【算法专场】模拟(上)
  • CAAC执照无人机实训室建设技术详解
  • Nuxt3入门:样式的注入、定义和使用(第3节)
  • AAA原理与配置
  • 嵌入式24千兆电口+4万兆光口管理型三层交换机RTL9301模块
  • 惠中科技智能高效综合光伏清洗技术
  • mysql优化案例分享
  • opencv之几何变换
  • Docker 的安全优化
  • 巴西电商市场消费需求仍坚挺,商机还无限吗?卖家必知的巴西电商平台有哪些?
  • CSS动画(animation)事例
  • 深入理解Java 8中的Stream API及其应用
  • log4j 清除MDC上下文 MDC分类日志
  • 2025年最新:如何搭建java springboot音乐网站?vue前端助力,实现音乐在线分享
  • OpenStack概论和部署
  • 3142. 判断矩阵是否满足条件
  • 不同Linux主机之间,复制Conda环境【最详细教程】
  • KRTS网络模块:UDP通信