第一次刷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# 主题想表达的那般,正确的学习姿势方能让人走得更远,走进大厂
随机推荐
- avaScript —— 常用正则表达式
用户名 /^[a-z0-9_-]{3,16}$/ 密码 /^[a-z0-9_-]{6,18}$/ 十六进制值 /^#?([a-f0-9]{6}|[a-f0-9]{3})$/ 电子邮箱 /^([a-z0 ...
- @RestController vs @Controller
package com.example.demo.controller; import java.util.HashMap; import java.util.Map; import org.spri ...
- React(4) --引入图片及循环数据
引入图片的方法 1.引入本地图片 方法1: import logo from '../assets/images/1.jpg'; <img src={logo} /> 方法2: <i ...
- try、catch、finally--try块里有return,finally还执行吗?
finally块的作用是,保证无论出现什么情况,finally块里的代码一定会被执行. 由于程序执行return就意味着结束对当前函数的调用并跳出这个函数体,所以任何语句要执行都只能在return之前 ...
- 吉首大学2019年程序设计竞赛(重现赛) J 滑稽树下你和我 (递归)
链接:https://ac.nowcoder.com/acm/contest/992/J来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...
- java ArrayList练习题
package java06; /* *随机产生6的1——33的数字,并存储到列表中,再进行遍历 * */ import java.util.ArrayList; import java.util.R ...
- 【leetcode】592. Fraction Addition and Subtraction
题目如下: 解题思路:本题考察的是分数的加减法.小学时候就学过,分数的加减法是先求两个分母的最小公倍数,然后分子分别乘以最小公倍数与自己分母的商,相加后约分即可.所以,本题只要按+,-两个符号分割输入 ...
- css linear-gradient;心跳animation
css线性背景 background:linear-gradient(20deg,#ccffff,#ffcccc); transform transform:scale(1.5); transform ...
- Spring Security 安全认证
Spring Boot 使用 Mybatis 依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> ...
- Vue学习笔记-组件通信-子传父(自定义事件)
props用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件中.我们应该如何处理呢?这个时候,我们需要使用自定义事件来完成.什么时候需要自定义事件呢?当子组件需要向父组件传递 ...