【leetcode】第一周刷leetcode总结

为什么刷leetcode?

本来是准备大三开始刷题的,但是这学期进来帅地的知识星球,地哥组建来一个刷题小分队,所以我就开始啦刷题之旅。

为什么写在博客上?

1.为了记录自己学习的过程;
2.在刷题小队里面交作业
3.联系自己写博客的技巧

第一道136.只出现一次的数字

136
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
首先认真读题很重要,给出的非空数组,,其次只有一个元素出现一次,其余元素 均 出现两次。
所以我代码里面不需要判断数组是否为空,但是有数组只有一个数字,和多个数字的情况。均出现两次,就先排序,然后对比第一个与第二个,一样就跳到第三个开始循环,对比第四个,直到比到不相等,或者到最后一个数字还没有比到,就返回最后一个。排序后到作用就比反复循环对比到效率大很多。
感悟:
每个题的解法不一
我把leetcode上看到的这个题的解法都列出来,供自己以后回忆
1.遍历数组,同时建立哈希表,遍历的过程中把数字及出现的次数存入哈希表中,再次遍历哈希表即可知道出现一次的数字
2.遍历数组时记录数字的出现,如果出现就记入,再次出现则将其从表中抹去,最后记录中的就是只出现一次的数字了
3.异或操作,由于相同数字异或时0,不同数字异或是1,遍历数组异或即可

第一次做还没有考虑时间及空间负责度,所以下次注意一下,顺便复习了时间空间复杂度。

第二题 1.两数之和

题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
1

首先想的还是排序(感觉排序用上瘾了)
因为提示只会存在一个有效答案,就循环相加,相加到能等于target的时候,就完成了,并把这两个数存入indexNum;在循环没有排序的数组中对应数字的下标,存入indexList(一开始写的有好多bug,然后修修改改,才最后一版。)
总结:
看了官方的解,真的比我的好太多,思路清晰
官方解1:暴力求解
枚举所有解,然后逐个检查他们所对应的数的和是否等于target
复杂度分析:
时间复杂度:O(n2)n为数组的长度
空间复杂度:O(1)只用到常数个临时变量
i循环到倒数第二个,一定有一个答案,否则抛出异常
1暴力求解
(这个比我的简单好多= =我想的好复杂)
我是弱智= =
官方解2:查找表法(这个思路很奇妙,因为上面是空间复杂度为1,时间复杂度为n平方,所以可以考虑用空间换时间的概念,也就是在遍历的同时记录一些信息,省去一层遍历)
这题需要记录已经遍历过的数值和它所对应的下标,可以借助查找表法;
哈希表(不用维护顺序)
平衡二叉搜索树(可以维护顺序)
1_2
1_2_1
时间复杂度:O(N)O(N),其中 NN 是数组中的元素数量。对于每一个元素 x,我们可以 O(1)O(1) 地寻找 target - x。
空间复杂度:O(N)O(N),其中 NN 是数组中的元素数量。主要为哈希表的开销。

第三题 104. 二叉树的最大深度

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

3_1
这个就是递归左子树和右子树的深度,判断左子树与右子树的大小,大的即为max深度

解法2:广度优先搜索
3_1_2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值