好的算法需要考虑到时间和空间复杂度,需要有健壮性,需要考虑边界测试、异常测试。面对比较难的算法,可以从时间和空间上想到多种不同的方法,选取最优解。
这些对于工作编码也是很有帮助的。

今天和昨晚参加了下LC的周赛和双周赛,每次都是只做了两题,第三四题没做出来,大佬都是半小时内全部搞定,确实还是要多多努力啊
个人算法解决思路:
1.暴力
2.空间换时间
3.链表或者数组 双指针
4.递增数组或者要求logn 二分
4.树 递归

面试题24.反转链表
此题第一反应是使用一个栈先遍历一遍,再遍历栈推出数据即可组成一个反转链表,空间复杂O(n),时间复杂O(2n)
进阶:看答案发现可以使用双指针直接迭代,上述解法也可以转为更简洁的递归
迭代:
空间复杂O(1),时间复杂O(n)
双指针:
递归:
使用递归时,一定不能去思考具体的递归过程。因为想多的肯定是会疯的

面试题29. 顺时针打印矩阵
一开始没审题,以为是正方形矩阵,搞了半天是长方形矩阵
时间O(n) 空间O(n)

面试题30. 包含min函数的栈
题目要求各函数时间为O(1)
一开始只想到用一个变量保存最小值,但是pop出去后最小值可能变,答案告诉我可以把变量升级成辅助栈
方法二:dfs变种,一个栈可实现dfs,二个栈判断奇偶并且调整入栈顺序即可实现层序遍历+反转

面试题33. 二叉搜索树的后序遍历序列
1.主要要找到规律,二叉搜索树后序遍历的最后一个节点是根节点,左子树都小于根节点,右子树都大于根节点,左右子树又可看作和原序列同结构的新序列,符合递归(前序遍历类似),时间复杂是O(n^2)
2.此题除了递归,可使用单调栈,时间复杂可降为O(n)

面试题35. 复杂链表的复制
1.空间换时间,可保存源节点和新节点的映射,时间空间都是O(n)
2.原地替换再拆分,时间O(n),空间O(1)

面试题36. 二叉搜索树与双向链表
这道题主要就是中序遍历,但是精髓在需要用到一个辅助指针一直指向前一个节点

面试题37. 序列化二叉树
这道题做了超久,我的做法采用层序遍历序列化再反序列化,看答案可以直接前序遍历,还没有尝试

面试题38. 字符串的排列
这道题首先必须递归,循环估计要废,借助stack可能能改称迭代
采用回溯加剪枝
回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。
这里感觉回溯加剪枝 和 动态规划有点像,感觉就是记忆化搜索了
记忆化搜索就是从上到下,并记录重复值,再递归返回,但是不像回溯递归返回后还要再次往下递归
动态规划是从下到上,但是也需要记录重复值,也就是类似剪枝

面试题41. 数据流中的中位数
1.使用数组,插入时随机 O(1),查找时排序获取中位数 O(nlogn)
2.使用数组,插入时二分查找插入到合适位置 O(n), 查找时已排序 O(1)
3.使用std::priority_queue优先队列,构建一个最大堆和一个最小堆,顺序插入两个堆中 O(logn) 查询时最大堆和最小堆首元素即可 O(1)

剑指 Offer 47. 礼物的最大价值
考察二维数组的遍历,遍历过程中需要保存每一步可能获取的最大值,经典dp问题

剑指 Offer 48. 最长不含重复字符的子字符串
这道题题解都说是使用动态规划,但是我还是不太懂,难道只要有重复计算值就算动态规划嘛,界限有点模糊,这道题坑主要在出现重复字符后还要判断这个重复字符所在位置是否在当前计数字符串内

剑指 Offer 49. 丑数
暴力解法遍历每一个数分别对2、3、5取余到底,但是超出时间限制,题解是模拟一个三数组,使用三指针的方式,保留上一个最小丑数算出下一个丑数,这个确实是动态规划的定义

剑指 Offer 53 - I. 在排序数组中查找数字 I
1.暴力遍历
2.二分查找左边界&右边界然后相减

剑指 Offer 56 - II. 数组中数字出现的次数 II
1.位运算,各位相加%3,最后得到不同数 时间O(n + n) 空间O(1)
2.排序后检查前后不相等的,这里注意要先排除第一个和最后一个 时间O(nlogn + n) 空间O(1)
3.map插入,寻找只出现一次的 时间O(n +logn) 空间O(n/3)

剑指 Offer 57 - II. 和为s的连续正数序列
1.暴力遍历时间O(n^2)
2.滑动窗口O(n/2)

剑指 Offer 59 - I. 滑动窗口的最大值
1.暴力遍历 O(n*k)
2.使用deque构造一个滑动窗口,该窗口单调递减,滑动过程中遇到更大的数就把队列中小数弹出,放入大数 时间复杂度:线性遍历nums O(N);每个元素最多仅入队和出队一次,O(N) 总共O(2N)

posted on 2020-05-22 00:05  陈不白  阅读(150)  评论(0编辑  收藏  举报