记录一次“超出内存限制”的原因

news2024/9/22 5:26:07

问题:

        问题的来源是力扣的这一条题目:LCR 048. 二叉树的序列化与反序列化 - 力扣(LeetCode)

        我寻思着也没啥,就前序遍历呗,时间和空间复杂度都是O(n),应该能把题目K掉。

问题代码:

        

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Codec {
public:
    list<string> str2lst(string str)    
    {
        list<string> ret;
        string cur = "";
        for(int i =0;i<str.size();++i){
           if(str[i] ==' '){
               if(cur.size()>0){
                   ret.push_back(cur);
                   cur ="";
               }
               continue;
           }
           cur = cur + str[i];
        }
        return ret;
    }
    TreeNode *  dfs2(list<string> & arr) //反序列化
    {
        if(arr.front()=="*"){
            arr.erase(arr.begin());
            return nullptr;
        }
        TreeNode * cur = new TreeNode(stoi(arr.front()));
        arr.erase(arr.begin());
        cur->left = dfs2(arr);
        cur->right = dfs2(arr);
        return cur;
    }
    void dfs(TreeNode * root,string & s){
        if(root == nullptr){
            s.push_back('*');
            s =s + " ";
            return;
        }
        s=s+(to_string(root->val)+" ");
        dfs(root->left,s);
        dfs(root->right,s);
    }
    // Encodes a tree to a single string.
    string serialize(TreeNode* root) {
        string ret = "";
        dfs(root,ret);
        return ret;
    
    }
    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        if(data.size()==0){
            return nullptr;
        }
        list<string> arr = str2lst(data);
        return dfs2(arr);
    }
};

结果:

       

卡住的例子:

(不过数据量并没有超出题目的范围)

而且我对比了官方的解法,思路几乎完全一样。

但是就是我的代码超时。。。。

分析:

        所以我怎么可能放过这么诡异的事件呢,然后我就一点一点的对照可以过的代码修改自己的代码运行测试,看看到底是哪个点出了问题。

        最终找到了问题的代码:

s=s+(to_string(root->val)+" ");

把它改为

s+=(to_string(root->val)+" ");

代码就可以通过了。。。。。。

因为使用前者的话,会在执行过程中创建一个新的临时的string对象,会导致内存占用翻倍同时消耗不少时间(特别是这里的s实际上很大的时候,额外时间和空间成本就会更高)。

所以说,

这里的”高一些“,实际上可能会导致巨大的差异。

平时开发过程中要养成使用更加高效的语法的习惯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1132286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InCopy 2024 v19.0.0.151(文案撰写与编辑软件)

InCopy 2024 for Mac是一款文案撰写与编辑软件&#xff0c;适用于在Mac上进行文字编辑和排版工作。它是Adobe Creative Cloud套件中的一部分&#xff0c;主要面向文字编辑人员、作家和出版团队&#xff0c;提供了一系列强大的功能&#xff0c;以协同工作和改进工作流程。 InCo…

学校巡课工具,这次真包教包会!

随着教育领域的不断发展和科技的快速进步&#xff0c;在线巡课系统已经成为一种强大的工具&#xff0c;为学校、教育机构和教育者提供了全新的教学监督和评估方式。 客户案例 中学巡课项目 成都某中学面临着监督和改进教学质量的挑战。泛地缘科技推出的在线巡课系统&#xff0c…

欧拉图相关的生成与计数问题探究

最近学了一波国家集训队2018论文的最后一个专题。顺便带上了一些我的注解。 先放一波这个论文 1.基本概念 欧拉图问题是图论中的一类特殊的问题。在本文的介绍过程中&#xff0c;我们将会使用一些图 论术语。为了使本文叙述准确&#xff0c;本节将给出一些术语的定义。 定义…

嵌入式软件找实习需要掌握哪些知识?

嵌入式软件找实习需要掌握哪些知识&#xff1f; 嵌入式软件实习暂时不用刷力扣。具体需要掌握哪些知识每个公司的要求都不太一样&#xff0c;因为嵌入式也有很多细分领域&#xff0c;单片机、C语言是需要熟悉的&#xff0c;最近很多小伙伴找我&#xff0c;说想要一些嵌入式资料…

基于springboot实现篮球论坛管理系统项目【项目源码+论文说明】

基于springboot实现篮球论坛管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗…

前端应用发布到nodejs server后浏览器刷新404问题

现象&#xff1a;Angular、Vue和React项目SPA应用如果路由模式为history&#xff0c;部署到服务器后&#xff0c;点击浏览器刷新按钮会出现404。 原因&#xff1a;当路由模式为history的时候&#xff0c;服务器端会根据浏览器中的请求地址去匹配资源&#xff0c;此时服务器端没…

安卓恶意应用识别(四)(特征处理与分类模型构建)——终结

前言 前面三章将数据初步整理出来&#xff1a; 1.安卓恶意应用识别&#xff08;一&#xff09;&#xff08;Python批量爬取下载安卓应用&#xff09; 2.安卓恶意应用识别&#xff08;二&#xff09;&#xff08;安卓APK反编译&#xff09; 3.安卓恶意应用识别&#xff08;三&a…

一张Lambda大数据架构架构图

架构图 大数据的架构包括了Lambda架构和Kappa架构&#xff0c;Lambda架构分解为三层&#xff1a;即批处理层、加速层和服务层&#xff1b;Kappa架构不同于Lambda同时计算流计算和批计算并合并视图&#xff0c;Kappa只会通过流计算一条的数据链路计算并产生视图。 该系统的大数…

1024程序员节|是时候,展示真正的实力了!

“代码改变世界&#xff0c;开源创造未来” 一年一度的程序员节如期而至&#xff01; 在由“0”和“1”构建的二进制世界里 运行程序的硬件进制基础是“1024” 因此&#xff0c;将每一年的10月24日定为“程序员节” 而作为码出每一个1024的程序员 则是这个“二进制世界”里…

*Django中的Ajax jq的书写样式1

导入插件&#xff0c;导入jquery,json是添加的json文件 Ajax的get请求与post请求 urls.py path(in3/,views.in3), views.py def in3(request):return render(request,07.html) 要返回数据的path没有写&#xff0c;html就是下面图片中控制台的内容&#xff0c;记得传递参数…

图片gif怎么做?这一招分分钟制作

在现代的通讯工具中&#xff0c;gif动态表情已经是人们日常必不可少的一种交流工具了。当我们想要自己制作gif动画图片的时候该怎么办呢&#xff1f;这时候&#xff0c;只需要使用GIF中文网的gif图片制作&#xff08;https://www.gif.cn/&#xff09;功能&#xff0c;上传多张静…

MySQL恢复不小心误删的数据记录(binlog)-生产实操

同事操作删除生产数据时&#xff0c;未及时备份导致误删除部份数据。现通过mysql的binlog日志回滚数据。 1.由于我们第一时间找到相应的操作时间的大概在12点~13点之间操作删除了product和product_item表的部份数据。因此我们只要找到这期间的binlog文件就行了&#xff0c; 脚…

【字符串】【字符串和字符数组的相互转化】Leetcode 541 反转字符串 II

【字符串】【toCharArray & String st new String&#xff08;ch&#xff09;】Leetcode 541 反转字符串 II 字符串和字符数组的相互转化:star:解法1 字符串和字符数组的相互转化⭐️ 解法1 时间复杂度O(N) 这个解法的时间复杂度是O(N)&#xff0c;其中N是字符串的长度。…

美颜SDK集成指南:为应用添加视频美颜功能

随着社交媒体和直播应用的兴起&#xff0c;视频美颜功能已成为用户追求的一项热门特性。用户希望能够在拍摄照片或进行实时视频直播时&#xff0c;使用美颜功能来增强其外观。为了满足这一需求&#xff0c;开发者可以考虑集成美颜SDK&#xff0c;为其应用增加这一吸引人的功能。…

花生供应链中的沙门氏菌、大肠杆菌和肠杆菌: 从农场到餐桌

1.1Title:Salmonella, Escherichia coli and Enterobacteriaceae in the peanut supply chain: From farm to table 1.2 Author: Nascimento M. S. 1.3 机构&#xff1a;Campinas University 1.4 分区/影响因子&#xff1a;Q1/6.475 1.5 期刊&#xff1a;FOOD RESEARCH INT…

linux,windows命令行输出控制指令,带颜色的信息,多行刷新,进度条效果,golang

一、带颜色的信息 linux 颜色及模式编号 // 前景 背景 颜色 // --------------------------------------- // 30 40 黑色 // 31 41 红色 // 32 42 绿色 // 33 43 黄色 // 34 44 蓝色 // 35 45 紫红色 // 36 46 青蓝色 // 37 47 白色 // // 模式代码 意义 //…

接口测试到底怎么做,5分钟时间看完这篇文章彻底搞清楚!

01、通用的项目架构 02、什么是接口 接口&#xff1a;服务端程序对外提供的一种统一的访问方式&#xff0c;通常采用HTTP协议&#xff0c;通过不同的url&#xff0c;不同的请求类型&#xff08;GET、POST&#xff09;&#xff0c;不同的参数&#xff0c;来执行不同的业务逻辑。…

SpringBoot中对Spring AOP的实现

文章目录 SpringBoot中对Spring AOP的实现AOP简介引入依赖AOP体系与概念编写AOP切面类启动SpringBoot项目然后访问controller控制器对环绕通知放行execution表达式的含义通过注解方式定义切点 SpringBoot中对Spring AOP的实现 AOP简介 AOP (Aspect Oriented Programming), 面…

模拟线程死锁现象:两个线程同时抢两个互斥锁

下面业务逻辑的分析 1.如果 flag 为 T&#xff0c;线程 A 就会先得到 / 持有 o1 对象锁&#xff0c;然后尝试去获取 o2 对象锁 2.如果线程 A 得不到 o2 对象锁&#xff0c;就会 Blocked 3.如果 flag 为 F &#xff0c;线程 B 就会先得到 / 持有 o2 对象锁&#xff0c;然后尝试去…

【python】numpy常用属性

文章目录 np.rangenp.quantilenp.digitizenp.randomrandseedpermutation np.uniquenp.zerosnp.sumnp.logtransposebool判断 首先导入numpy import numpy as npnp.range np.range(start, end, step): 获取指定区间和步长的列表。 np.arange(0, 1, 0.1) # 区间: [0, 1), 步长…