代码编织梦想

lc-爱代码爱编程

11 盛最多水的容器 原题链接:盛最多水的容器 个人解法 思路: 没想到 O

lc-爱代码爱编程

原题链接:旋转图像 个人解法 思路: 这个就是模拟坐标的变换,可以将坐标写下来,发现每一个坐标进行变换后,都会导致被变化的坐标也需要变换过去,才能确保不会发生值被覆盖。那么这就是一个递归的做法,当然也可以利用

lc-爱代码爱编程

原题链接:字母异位词分组 个人解法 思路: 同一个字母异位词满足字符串中每个字符出现的次数都相等,那么我们其实可以用C++中的map来表示一个字符串,然后再利用map的哈希来直接查找其对应的字母异位词组,加入

lc-300-最长递增子序列-爱代码爱编程

原题链接:最长递增子序列 个人解法 思路: 动态规划 状态表示:f[i]表示以i结尾的最长上升子序列 状态转移:f[i] = max(1, f[j] + 1), j : 1 ~ i - 1 &&

lc-297-二叉树的序列化与反序列化-爱代码爱编程

原题链接:二叉树的序列化与反序列化 题解 DFS 思路: 前序遍历二叉树,遇到空则将空表示为null,然后构造的时候再按照字符串进行前序构造。 时间复杂度:

lc-287-寻找重复数-爱代码爱编程

原题链接:寻找重复数 个人解法 思路: 可以遍历数组,将数组中的值放到其对应位置(不断交换),如果发现不是自己位置上的值和当前值相等,意味着此时已经见到了重复的值,直接返回即可。 然后才意识到不让修改数组,那

lc-283-移动零-爱代码爱编程

原题链接:移动零 个人解法 思路: 类似冒泡排序的想法,两两比较将0移到末尾。 时间复杂度: O

lc-279-完全平方数-爱代码爱编程

原题链接:完全平方数 个人解法 思路: 暴搜+剪枝,直接从n的开平方到1枚举,不断拆分n,知道n为0,此时记录最小值。当拆分的数已经大于记录的答案,既可以直接返回来剪枝。 时间复杂度:

lc-240-搜索二维矩阵 ii-爱代码爱编程

原题链接:搜索二维矩阵 II 个人解法 思路: 因为每一行每一列都是升序的,故一种直观的方法就是遍历每一行,对每一行进行一个二分搜索。 时间复杂度:

lc-239-滑动窗口最大值-爱代码爱编程

原题链接:滑动窗口最大值 个人解法 思路: 这道题是一道经典的单调队列的题,我们根据滑动窗口可以发现,滑动窗口中最大值左边的值我们是可以不用管的,因为它们总是比最大值先滑出窗口,但是右边的值确实要记录下来,因

lc-236-二叉树的最近公共祖先-爱代码爱编程

原题链接:二叉树的最近公共祖先 个人解法 思路: 这个题算一个经典的题目了,我的方法是dfs遍历到结点,将路径记下来,那么这里就有两条路径,最近的公共祖先只要求这两个序列的最后一个相等的值。 时间复杂度:

lc-234-回文链表-爱代码爱编程

原题链接:回文链表 个人解法 思路: 我们可以利用快慢指针找到链表的中间位置,然后翻转后半部分链表,此时再判断前半部分和后半部分是否一一相等即可。 当然也可以全部翻转链表查看时否相等。 时间复杂度:

lc-221-最大正方形-爱代码爱编程

原题链接:最大正方形 个人解法 思路: 这题与之前做过的求二维最大矩形比较类似,但这题有限制条件就是只能为正方形,那么我们就可以利用二维前缀和来做,我们枚举起始点,那么第二个坐标我们只需枚举边长即可。 时间

lc-215-数组中的第k个最大元素-爱代码爱编程

原题链接:数组中的第K个最大元素述 个人解法 思路: 快速选择算法 时间复杂度: O (

lc-207-课程表-爱代码爱编程

原题链接:课程表 个人解法 思路: 一般这种完成某一件事需要完成另一件事,就是典型的AOV网,那么如果能完成所有课程,这个图必须是有向无环图,那么我们可以利用拓扑排序的思路,求图的拓扑序,如果存在环,则无法遍

lc-206-反转链表-爱代码爱编程

原题链接:反转链表 个人解法 思路: 画图看指针如何操作即可。 时间复杂度: O (

lc-200-岛屿数量-爱代码爱编程

原题链接:岛屿数量 个人解法 思路: 这道题是经典的dfs或者bfs暴搜题,直接对岛屿进行暴搜标记已经访问,那么主函数就看有几个没被访问的岛屿。 时间复杂度:

lc-198-打家劫舍-爱代码爱编程

原题链接:打家劫舍 个人解法 思路: 这是一个DP问题,每间房屋存在两种状态,要么被偷,要么没被偷。那么我们可以利用自动机直观的解决状态转移的问题,如果我们将两种状态视为状态机的两个结点(被偷:1, 没被偷:

lc-155-最小栈-爱代码爱编程

原题链接:最小栈 个人解法 思路: 核心的是解决如何维护当前栈中的最小值,我们其实可以利用一个栈(记为S),这个栈中的元素是单调递减的,如果压栈的值小于等于S的栈顶(既最小的元素),那么我们就该值也压入S,这

lc-152-乘积最大子数组-爱代码爱编程

原题链接:乘积最大子数组 更好的解法 思路: 这里也许一开始会想到直接f[i] = max(f[i - 1]*nums[i], nums[i]),但这里有问题,如果有序列{5,6,−3,4,−3}, 求出来的