摘要:
题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度。 思路分析:(题解来自:https://leetcode-cn.com/u/liweiwei1419/) 动态规划,时间复杂度为 O(N^2); “动态规划”的两个步骤是思考“状态”以及“状态转移方程”。 有的资料又将“动态规划”分为 阅读全文
摘要:
题目描述: 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 思路分析: 关键:这道题的关键是对要定位的“数”做二分,而不是对数组的索引做二分。要定位的“数”根据题意在 1 和 阅读全文
摘要:
题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 思路分析: 阅读全文
摘要:
题目描述: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 思路分析:思路: 动态规划首先初始化长度为n+1的数组dp,每个位置都为0如果n为0,则结果为0对数组进行遍历,下标为i,每次都将当前数字先更新为最 阅读全文
摘要:
题目描述: 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。 进阶:你可以在常数空间复杂度内完成这个题目吗?( 阅读全文
摘要:
题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [ 阅读全文
摘要:
题目描述: 请判断一个链表是否为回文链表。 思路分析: 思路一:借助辅助栈和辅助队列,链表节点依次入队列和入栈,依次出栈和出队,判断是否相等即可 时间复杂度:O(n) 空间复杂度:O(2n)->O(n) 思路二:快慢指针 思想很简单,用2个指针,一个low,一个fast,fast是low的2倍,所以 阅读全文
摘要:
题目描述: 翻转一颗二叉树 思路分析: 1)递归,不断交换左右子树,直到子树为空 2)迭代: 这个方法的思路就是,我们需要交换树中所有节点的左孩子和右孩子。因此可以创一个队列来存储所有左孩子和右孩子还没有被交换过的节点。开始的时候,只有根节点在这个队列里面。只要这个队列不空,就一直从队列中出队节点, 阅读全文
摘要:
题目描述: 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 思路分析: 思路一:排序+遍历,如果是升序,那就是返回nums[n-k],如果是降序,那就是返回nums[k-1] 时间复杂度:O(Nlogn) 空间复杂度:O( 阅读全文
摘要:
题目描述: 反转一个单链表。 思路分析: 方法一:迭代假设存在链表 1 → 2 → 3 → Ø,我们想要把它改成 Ø ← 1 ← 2 ← 3。 在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来 阅读全文