力扣学习day1

学习目标:

1.在2021年2月底刷完力扣10%题目。 2.从零开始学习C,C++,python。 3.用多种方法写出解题思路,以及理解代码。

原计划是想自己将每道题的代码也顺便写出来,但发现自己动手能力太弱,基础太少,耗时太长。如果按照原计划完全无法完成我既定任务,因此就简单的每题写出思路,目标是至少遇上这类题目都能有所思路,然后再把常用的代码模型锻炼下。

学习内容:

1.两数之和

网址

题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

你可以按任意顺序返回答案。

思考:说真的,最开始的时候我还以为是真的就是a+b的入门级题目,然后看完题目后才知道想错了。思路十分的简单,就是固定一个nums,去寻找taget-nums是否存在在这个数组当中。

主要是暴力法和哈希表法两种方法,我在解题的时候使用的是暴力法,但事实告诉我C语言用暴力法只会导致超时,时间复杂度为O(n^2),使用哈希表法,会用到O(n)的空间复杂度,但这样查找taget-nums的时间就缩短了,明显的哈希表只是在大学的课程学了概念,但在代码使用上很少使用,甚至可以说都不知道怎么使用,这是我所欠缺的地方。

总结:
1.和数据结构有关的题目一般别用C写,如果不是项目而是面试,考试过程,用C写出一个HASH表的时间都足够别人写两题了。C++,python等语言的做法比C容易太多了,虽然明白在效率上真的可能比不过,但初学者来说,肯定先考虑事情能不能快速完成而不是代码效率。毕竟不是人人是ACM大佬。

2.返回值的特别,题目中并没有说明返回值是什么形式,这需要做题者的经验,对于C语言来说就是给returnSize分配空间当成数组返回,而对于第一次做的我来说,我会把returnSize当成返回大小的说明,另外再申请空间,返回数值。

3.这题主要考察的可能还主要是哈希表的使用。对于C语言选手可能相对的痛苦,而且官方给出的答案引用了其它有关HASH的库,真让一个人写出HASH以及其调用的功能估计短时间难以实现,,不知道有没有C语言选手能给我思路。

2.两数相加

网址

题目:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储一位数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

思考:说真的我的思路是两种,一是将其转为整型,再进行计算,二是对齐链表,短的用0填充。这题主要考察的是对链表的操作,与合并链表题目十分相似,基本掌握一题这类题都很好做。有一说一,对于C语言选手来说,这题比上题简单多了。

3.无重复字符的最长子串

网址

题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

思考:最开始我有个思路是寻找两个临近字符之间的最长长度,但实际这么就算就忽略了在这两个字符之间存在重复字符的可能,因此是错误的,后来在看完讨论后,才明白解法。

1.解法可以使用两个指针,先判断字符串长度是否大于1,如果是0,则返回0,是1则返回1。

2.当字符串长度大于等于2时,两个指针开始均指向下标0,并将该字符放入一个列表当中。

3.循环开始,移动指针2往后,如果指针2读取的新字符在创建的列表当中,则记录下当前长度,而指针1一直移动到重复的字符后面,并在移动的过程将序列删除。

4.每次循环过程都会更新当前最长长度,直到指针2指向最后一位。为了减少空间复杂度,可以不新创列表而是在原列表上进行。

后序

今天其实不止写了这些题目,本来还想发下自己写的代码,但是写这个博客真的很耗时间,于是作罢了,之后还会慢慢的对我写的进行补充学习。不得不说,我代码动手能力还是很菜,计划明天多练习哈希表,链表操作,并学懂C,C++,python等不同的写法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此人受打击,决定去力扣历练

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值