第一次刷Leetcode,为什么耗费很多时间
Leetcode第2题思考过程分析:耗费的时间与思考过程
1、 审题耗费了很长时间,英文看不懂。两个单链表代表了两个整数,整数逆序,(2 -> 4 -> 3) + (5 -> 6 -> 4),(2 -> 4 -> 3)表示342,另一个数是456,和为708;巧合的是243+564=807,这个巧合不能用来解题。
2、 解题的初步思路是逆序链表,将数字存在普通数组里(这需要动态数组,因为输入的链表长度未定),然后相加,再把sum分解为各位数字,逆序存入单链表(这一步令我困惑的是对两个链表的操作有重复的,想着能不能简化,其实顺序访问链表存入数组是可行的)。这个时候我已有的知识是:sum%10这样的操作可以得到个位数。
3、 思考ListNode* l1是如何存这些数字的,l1是不是为空的头指针。其实第一个节点就存了(2 -> 4 -> 3)的2。
注意链表里有个函数,所以new ListNode(n)可以初始化一个节点,next置为NULL
4、 下面是代码各部分当时的思考分析
0:考虑链表有没有头指针,(2 -> 4 -> 3),l1节点存的2;
1:想着declare一个ListNode指针有两种写法
2:顺序遍历链表,不用new的数组,vector添加元素有push_back,想了下有没有push_front,vector为了效率,不支持,又考虑用insert操作。
4:从数字转换为int,vector存的顺序为(2 -> 4 -> 3),用正向iterator首先得到低位2,但用num1=num1*10+*it迭代需要先从3开始,由此用reverse_iterator.
步骤2和4因为有两个链表,需要重复这两步,考虑过如何简化,又把2考虑为链表逆序,不用vector,只用指针操作,其实多想了
5:对和需要分解为各位数字,并用创建的新链表接收。考虑了while条件为numSum!=0,
该如何写循环语句,是用尾插法还是头插法,还把newSum=newSum/10写成newSum=newSum%10。
第五步耗费了大量时间,总是想不清楚,感觉很混乱,因为并没有访问链表时p=p->next这种现成的语句。
3、原本写成int,submit报错如下:测试 [9,1999999999]不通过,得到的结果很奇怪。
Num2的值为1410065399,不是应该为9999999991吗?为了检测程序中的错误,添加了很多cout语句。看4部分代码,没错啊。其实问题不是出在4,而是整形溢出了,查了int最大值,比9999999991小。把num1和num2改为long型的,又遇到了错误,这个时候我才意识到test case中有大数,连long long都装不下。需要用大数计算。
审题花费时间,然后是想出整体解决思路,实现整体思路中的步骤,每个步骤可能有多种写法(这是个广度搜索过程),前步骤又影响后步骤(这是个深度搜索思考过程,如果进行不下去了,会回到某点),如果遇到想不清细节的部分就会很耗时间。代码需要考虑整体,而脑力又只够思考局部。
第一次刷Leetcode,为什么耗费很多时间的更多相关文章
- 第一次刷leetcode小结
LeetCode 上不会的 Reverse Integer Gray Code Generate Parentheses Pascal's Triangle II 正方向读和反方向读保持不变的区别 T ...
- 刷leetcode是什么样的体验?【转】
转自:https://www.zhihu.com/question/32322023 刷leetcode是什么样的体验? https://leetcode.com/ 1 条评论 默认排序 按时间排 ...
- 用 JavaScript 刷 LeetCode 的正确姿势【进阶】
之前写了篇文章 用JavaScript刷LeetCode的正确姿势,简单总结一些用 JavaScript 刷力扣的基本调试技巧.最近又刷了点题,总结了些数据结构和算法,希望能对各为 JSer 刷题提供 ...
- 刷LeetCode的正确姿势——第1、125题
最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...
- 初刷LeetCode的感受
自从上个月进入实验室的云安全项目组后,因为要接触到实际的代码,在实验室博士的建议下我们项目组的硕士开始刷LeetCode练习编程能力,保持每周抽空刷几道算法题.虽然刷的不多,到现在一共只刷了不到30题 ...
- 从心出发-刷leetcode写给5年后的自己
而立之年终未立,不惑而年犹存惑!这或许就是所谓的中年危机吧! 自认为是一个"勤奋"的人,又"未有寸功",天天碌碌,不知何为. "常立志"而未 ...
- 《通过刷leetcode学习Go语言》之(1):序言
Author : Email : vip_13031075266@163.com Date : 2021.03.07 Version : 北京 C ...
- 用JavaScript刷LeetCode的正确姿势
虽然很多人都觉得前端算法弱,但其实 JavaScript 也可以刷题啊!最近两个月断断续续刷完了 leetcode 前 200 的 middle + hard ,总结了一些刷题常用的模板代码.走过路过 ...
- GitHub 热点速览 Vol.18:刷 LeetCode 的正确姿势
作者:HelloGitHub-小鱼干 摘要:找对路子,事半功倍,正如本周 GitHub Trending #刷 LeetCode# 主题想表达的那般,正确的学习姿势方能让人走得更远,走进大厂
随机推荐
- python学习第三天格式化输出%s %d
编程语言为什么要格式化输出吗,一般print()就够了,有些复杂的格式输出比较麻烦,用格式化输出更加高效, info=""" ---------------------- ...
- 并行开发 2.plink
原文:8天玩转并行开发——第二天 Task的使用 在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于 “任务的编程模型”所冲击, ...
- C#设计模式:桥接模式(Bridge Pattern)
一,桥接模式,直接上代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- BUUCTF--内涵的软件
测试文件:https://buuoj.cn/files/0450881183f6478e110f9ea27581683b/70125468-0786-4705-bd91-87037f8f3e16.ex ...
- k3 cloud库存管理中的直接调拨单权限分配出现问题
k3 cloud中给直接调拨单分配了对应的权限,但是客户端无法查看到对应的单据 解决办法: 是应为没有发布到对应的客户端和浏览器端,打开bos,找到对应的单据并点击发布,找到对应的目录,如图所示: 把 ...
- JS书目推荐(私教推荐)
下面几本书是私教推荐的,从入门到提高,从易到难,想找电子版的可以去下面这个网站找找,挺多书籍的 鸠摩搜书https://www.jiumodiary.com/ JavaScript编程精解 (第二版) ...
- zabbix入门之配置邮件告警
zabbix入门之配置邮件告警 邮件环境搭建 使用本地邮箱账号发送邮件 zabbix-server 端安装 mailx .sendmail或者psotfix 服务,系统默认安装好了postfix #安 ...
- java 计算时间差
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date d1 = df.parse(&quo ...
- HIbernate 查询拼接参数
public List<TrailTestModel> findByEid(List<String> trailids, String eid) { // TODO Auto- ...
- Python3.5-20190530-unittest模块
>>> dir(unittest) #所有的属性和方法 ['BaseTestSuite', 'FunctionTestCase', 'SkipTest', 'TestCase', ' ...