LeetCode刷题笔记

[001]两数之和

1° 暴力法,两次遍历数组。T(n) = O(n²),S(n) = O(1);

2° 采用hash表,将数字和对应的下标存入hash表中。然后遍历数组,求target - nums[i]是否在hash表中。T(n) = O(n), S(n) = O(n).

 

[002]两数相加

将各位数之和的个位数保存在vector中,若有进位,同时考虑进位。最后再利用vector中的数字构造链表。T(n) = O(n), S(n) = O(n).

 

[003]无重复字符的最长子串

1° 采用动态规划,设置每种情况的首尾位置并判断每种情况。测试用例未完全通过(当给的字符串足够长时,产生内存溢出)

2° 参考精选解答:用滑动窗口的方法。依次判断新加入的字符是否在set中,若不在,向后偏移;若在,删除set中前面的字符直到相同字符被删除。整个过程需用max来记录最大长度用于返回。

 

[005]最长回文子串

 

[011]盛水最多的容器

两个标志分别指向vector头尾。一次比较头尾元素大小,较小的则下标向中间移动。

 

[019]删除链表倒数第N个节点

双指针法。按照偏移之后是否到达尾部,分为删除头结点和非头结点。

 

[020]有效的括号

辅助栈和辅助Map。左括号则进栈,右括号判断是否匹配,不匹配或栈空直接返回。

 

[021]合并两个有序链表

1° 重新分配内存,依次比较两个链表中每个节点;

2° 先比较首节点的值,将较小的节点作为返回节点。依次将第二个链表的节点插入第一个节点的相应位置。不需额外分配空间。

 

[031]下一个排列

解法参见官方题解,注意字符串不要越界。

从右往左找第一对左边比右边小的数字,让后将左边的数字与右边递减串中比它大的最小的一个值交换,再将右边递减的串逆转。

 

[034]排序数组中找数字的第一个和最后一个位置

二分查找。查找到之后往前后依次查找。理想时间复杂度为O(logN),最坏情况时间复杂度为O(N).

 

[046]全排列

△△△用递归,依次交换。下标没有弄清楚。。。

 

[048]旋转图像

先将左上与右下的元素互换,再翻转每一行的元素。

 

[049]字母异位词分组

将容器用到极致!!!灵活运用map带来极大的便捷!!!

 

[053]最大子序和

动态规划。分析出状态方程,转换成代码。

 

[062]不同路径

动态规划。dp保存某个位置时的局部最大路径个数。

 

[094]二叉树的中序遍历

用非递归方法,写先序,中序,后序以及层次遍历。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值