剑指offer-刷题笔记-中难题-JZ34 二叉树中和为某一值的路径(二)

C++ emplace_back和push_back性能比较 概述 从理论上说,右值引用版的emplace_back要比左值引用版的push_back更快一些,因为前者会调用参数的移动构造函数,而后者会调用参数的拷贝构造函数。熟悉这两种构造函数的读者自然明白移动构造函数不需要重新分配内存空间,所以要比拷贝构造函数耗时更少。 实践 一直只是从理论上知道以上的观点,但是并没有实际验证,刚好一个最近回顾以前的一个项目的时候看到了push_back,所以打算写一段代... 阅读详情

剑指offer-刷题笔记-中难题-JZ34 二叉树中和为某一值的路径(二)

版本1-递归

注意path.emplace_back(root->val)和path.push_back(root->val)的区别,如果是尾插临时对象的话,push_back()需要先构造临时对象,再将这个对象拷贝到容器的末尾,而emplace_back()则直接在容器的末尾构造对象,这样就省去了拷贝的过程
class Solution {
public:
    vector<vector<int>> ret;
    vector<int> path;
    void dfs(TreeNode* root, int number) {
        // 处理树为空
        if (root == NULL) return;
        // 路径更新
        path.emplace_back(root->val);//注意
        // number更新
        number -= root->val;
        // 如果递归当前节点为叶子节点且该条路径的值已经达到了expectNumber,则更新ret
        if(root->left == NULL && root->right == NULL && number == 0) {
            ret.emplace_back(path);
        }
        // 左右子树递归
        dfs(root->left, number);
        dfs(root->right, number);
        path.pop_back();
    }
    
    vector<vector<int>> FindPath(TreeNode* root,int expectNumber) {
        dfs(root, expectNumber);
        return ret;
    }
};

版本2-辅助队列

#include<numeric>
class Solution {
public:
    vector<vector<int>> FindPath(TreeNode* root,int expectNumber) {
        vector<vector<int>> ret;
        if(root == NULL) return ret;
        pair<vector<int>, TreeNode*> p({root->val}, root);
        // 维护一个path,node的队列
        queue< pair<vector<int>, TreeNode*> > q;
        q.push(p);
        // 如果队列非空
        while(!q.empty()) {
            pair<vector<int>, TreeNode*> cur = q.front();
            q.pop();
            TreeNode* node = cur.second;
            // 左子节点path
            if(node->left) {
                vector<int> left = cur.first;
                left.push_back(node->left->val);
                q.push(make_pair(left, node->left));
            }
            // 右子节点path
            if(node->right) {
                vector<int> right = cur.first;
                right.push_back(node->right->val);
                q.push(make_pair(right, node->right));
            }
            // 叶子节点统计
            if(node->left == NULL && node->right == NULL) {
                vector<int> l = cur.first;
                int sum = accumulate(l.begin(), l.end(), 0);
                if(sum == expectNumber) ret.push_back(l);
            } 
        }
        return ret;
    }
};

K-means在关键词聚类中的尝试 K-means在文本聚类中的尝试 K-means算法是无监督的聚类算法。它的算法思想是:先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。 K-means算法的关键点在于: 初始k个聚类中心的选择 距离的计... 阅读详情

相关推荐

国内外主流嵌入式GUI汇总

随着MCU资源增多,处理能力也强了,同时市场需求也增多了GUI功能也越来越丰富了,很多的嵌入式图形库都可以做出绚丽的界面。

m0_69914734的博客 3289

C++ emplace_back()是什么

emplace_back():在容器尾部添加一个元素,调用构造函数原地构造,不需要触发拷贝构造和移动构造。因此比push_back()更加高效。 https://www.jianshu.com/p/c0cbd9dbf772

软件工程小施同学 的专栏 1612

【雷达成像实战】RD、CS、RMA算法对比与Matlab实现:从信号处理到高清成像

本文深入对比了雷达成像中三种核心算法:经典的距离多普勒算法(RD)、基于稀疏重建的压缩感知算法(CS)以及高精度的快速多通道获取算法(RMA)。通过详细的Matlab实战代码,从原理拆解到实现步骤,分析了各自在计算效率、成像精度、数据需求和适用场景上的优劣,为工程选型与算法实践提供了清晰指南。

weixin_29095587的博客 446

关于emplace_back()的理解

emplace_back()是c++11的新特性。 和push_back()的区别在于 push_back()方法要调用构造函数和复制构造函数,这也就代表着要先构造一个临时对象,然后把临时的copy构造函数拷贝或者移动到容器最后面。 而emplace_back()在实现时,则是直接在容器的尾部创建这个元素,省去了拷贝或移动元素的过程。 vector<pair<int, int>> ret; ret.push_back(1,1)//会报错,因为没有构造一个临时对象 ret.push_b

mmm123213的博客 4万+

自定义控件三部曲视图篇(六)——RecyclerView系列之三自定义LayoutManager

前言:把握生命里的每一分钟,全力以赴我们心中的梦,不经历风雨 怎么见彩虹,没有人能随随便便成功 在第一篇中已经讲过,LayoutManager主要用于布局其中的Item,在LayoutManager中能够对每个Item的大小,位置进行更改,将它放在我们想要的位置,在很多优秀的效果中,都是通过自定义LayoutManager来实现的,比如: 可以看到这些效果都非常棒,通过这一节的学习,大...

启舰 1万+

从时序迷宫到稳定通信:FSMC配置中的时间参数深度解析与实战避坑指南

本文深入解析STM32 FSMC配置中的时间参数,特别是AddressSetupTime和DataSetupTime的实战配置技巧。通过STM32F407连接SRAM的实际案例,提供从理论计算到CubeMX配置的全流程指南,帮助开发者避免常见时序陷阱,确保稳定通信。

nginx7reverse的博客 81

C++STL中emplace_back()和push_back()的区别

emplace_back()和push_back()的区别 先来看几个例子: #include<iostream> using namespace std; class A{ public: A(){ cout<<"A construct function."<<endl; } ~A(){ cout<<"A destory function."<<endl; } }; int

qq_38600065的博客 3979

【WRF-Urban】增加动态空间热排放数据以替换人为热排放参数

增加动态空间热排放数据以替换人为热排放参数

WW、forever的博客 1044

C++11使用emplace_back代替push_back

最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多。首先,写了一个类用于计时,//time_interval.h #pragma once#include <iostream> #include <memory> #include <string> #ifdef

华秋实的专栏 6万+

Qualcomm 常用NV列表

^ NV ITEM ^ 功能^^ |NV10 |mode prefer,找网模式|新平台使用NV80000| ^NV74 NV74=0关闭自动接听电话^ |NV240 |NV240=FALSE|EVDO出现网络的问题,此项必须设定为FALSE| |NV255 |CDMA规避网络列表(SID/NID号)| |NV256 |

sdrgtywretyeruet的专栏 5767

基于STM32设计的万能红外遥控器(学习型)

当前介绍了一种基于STM32微控制器设计的红外遥控器,支持接收解码功能和发送功能,可以将接收的码原样发送出去。 红外遥控器作为智能设备控制方式之一,在一定程度上满足了人们对于快速方便控制的需求。 当前设计的红外遥控器支持学习模式和发送模式。通过矩阵键盘上的数字键选择发送对应的控制码。 一共支持学习10个控制码,对应矩阵键盘上的数字。0~9。

6559

剑指offer第2版:树系列(二)

二叉树的题要优先思考是前序、中序还是后序的遍历思路

weixin_51142926的博客 2519

CUDA&PCL 点云体素下采样

CUDA&PCL 点云体素下采样

dayuhaitang1的博客 1268

剑指offer刷题宝典--第1节

剑指offer刷题宝典,重点总结,链表,树

weixin_41171614的博客 1275

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

剑指Offer:二叉树中和为某一值的路径(一、二、三)全解。(二叉树相关知识应用)

本文介绍了剑指offer中“二叉树中和为某一路径”中三种变种题,题目中对于“路径”的定义不同,输出结果也不同,因此解题方法也不同。但是三种变体都可以用二叉树常规解法来求解,理清思路对于“回溯、迭代”之类的题也有指导意义,因此做记录总结为下

weixin_41399650的博客 1521

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LeetCode刷题总结 - 剑指offer系列 - 持续更新

LeetCode刷题总结

qq_45464560的博客 5241

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《剑指offer》刷题记录汇总篇

《剑指offer》刷题汇总1 前言2 刷题网站3 刷题笔记汇总 1 前言   最近啃了个把月的数据结构与算法,有点飘了,准备拿牛客网的剑指offer模块练练手,个人觉得自己刚入门(或许还没入),所以这篇博客比较适合想学习数据结构或者刚接触数据机构的新手朋友朋友们,当然,大佬们也可以看看,一是指导,二是差缺补漏。   刷题顺序即题目顺序,时间的话大概一周 2 刷题网站 点击直达:剑指offer 3 刷题笔记汇总 题号 题目 知识点 JZ1 二维数组中的查找 数组、查找 JZ2 替换空格 字

郑德帅 864

深入解析DFS回溯算法 ——剑指offer - JZ34 二叉树中和为某一值的路径(二)

深度优先搜索是解决树和图相关问题的一个非常强大的工具。通过本文的分析和代码实现,我们可以看到,DFS不仅能够高效地解决问题,而且在实现上也相对直观。对于初学者来说,理解递归和回溯是理解此类问题的关键。希望这篇博客能帮助你更好地理解和应用深度优先搜索来解决二叉树路径问题。

like455的博客 1096

剑指offer(C++)-JZ34:二叉树中和为某一值的路径(二)(数据结构-树)

C++实现——二叉树中和为某一值的路径(二)(数据结构-树)

翟天保的博客 1万+

剑指offer JZ34 二叉树中和为某一值的路径(二)

原题链接:剑指offer JZ34 二叉树中和为某一值的路径(二) 开始自作主张在dfs里写了个剪枝:if(sum>=expectNumber) return ;,,,,题目里说了节点值有可能为负数,把剪枝去掉就对了 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*

想买很多漂亮衣服但是买不起的博客 1716

剑指 Offer 34. 二叉树中和为某一值的路径

注意到本题的要求是,找到所有满足从到某个经过的路径上的节点之和等于目标和的路径。核心思想是对树进行一次遍历,在遍历时记录从根节点到当前节点的路径和,以防止重复计算。

庄小焱 488

[java刷算法]牛客—剑指offer二叉树

一起学习二叉树吧

muzi_longren的博客 799

【算法】解题总结:剑指Offer 84 二叉树中和为某一值的路径(三) 、剑指Offer 82 二叉树中和为某一值的路径(一)

JZ84 二叉树中和为某一值的路径(三) (中等) 题目 描述 给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。 1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点 2.总节点数目为n 3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1) 假如二叉树root为{1,2,3,4,5,4,3,#,#,-1},sum=6,那么总共如下所示,有3条路径符合要求 示例1 输入: {1,2,3,4,5,4,3,#

Zhou_LC的博客 487

【剑指offer-C++】JZ34:二叉树中和为某一值的路径(二)

【剑指offer-C++】JZ34:二叉树中和为某一值的路径(二)

❀雾里看花花里看雾❀ 525

剑指offer刷题总记——Java

剑指offerJZ1 二维数组中的查找JZ2 替换空格JZ3 从尾到头打印链表JZ7 斐波那契数列JZ14 链表中倒数第k个节点JZ15 反转链表JZ36 两个链表的第一个公共结点 JZ1 二维数组中的查找 题目:二维数组中的查找 public class Solution { //双重for循环,遍历查找 public boolean Find(int target, int [][] array) { //行遍历,array.length为行数 for(i

小叮当不懒的博客 742

剑指offer

​一刷 剑指offer 记录

dwtianwen的博客 1104
上一篇: 剑指offer-刷题笔记-中难题-JZ33 二叉搜索树的后序遍历序列
下一篇: c++ 基础知识-函数高级
xiaoliyu00
博客等级 码龄9年 4180粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值