- 空间换时间,可以借助哈希表。
- 可以定义两个索引(首尾索引),同时遍历。
- 可以基于有序的条件下进行。
- 动态规划算法。
- 分治法。
- 斐波那契数列,迭代法。
- 取余、取模。
思路
- 空间换时间,借助字典。时间复杂度:O(n),空间复杂度:O(n)。
题解
思路
- 首尾同时遍历。时间复杂度:O(n),空间复杂度:O(1)。
题解
思路
- 先排序,在遍历中,在剩余的数组元素中进行首尾的同时遍历。时间复杂度:O(n^2),空间复杂度:O(1)。
题解
思路
- 动态规划算法。时间复杂度:O(n),空间复杂度:O(1)。
- 分治法。时间复杂度:O(nlogn),空间复杂度:O(logn)。
题解
思路
- 动态规划算法,遍历元素,如果是在历史最低点买入的,则当天卖出时利润最高。故记录一个历史最低买入。时间复杂度:O(n),空间复杂度:O(1)。
题解
思路
- 从卖出看买入,如果第二天价格下降,则当天卖出,并且记录历史最低买入。第二天为新的历史最低买入。注意天数为最后一天时,如果持续增,最后一天必定卖出。时间复杂度:O(n),空间复杂度:O(1)。
- 贪心算法,从买入看卖出,连续天只要上涨就记入利润,直到不再上涨,则卖出。把可能跨越多天的买卖都化解成相邻两天的买卖。时间复杂度:O(n),空间复杂度:O(1)。
题解
思路
- 斐波那契数列,迭代法。时间复杂度:O(n),空间复杂度:O(1)。
题解
思路
- 斐波那契数列,迭代法。时间复杂度:O(n),空间复杂度:O(1)。
- 斐波那契数列,递归法。如果数据大,会超时。
题解
思路
- 取模。时间复杂度:O(lgn),空间复杂度:O(1)。
题解
思路
- 比较一半:通过取整和取余操作获取整数中对应的数字进行比较,首尾相应数字比较。时间复杂度:O(lgn),空间复杂度:O(1)。
- 比较一半:将数字进行对折后看能否一一对应,即取出后半段数字进行翻转。时间复杂度:O(lgn),空间复杂度:O(1)。
- 将整数转为字符串。反转字符串,跟原字符串比较。
- 将整数转为字符串。字符串首尾相应位数进行比较。
题解
思路
- 从m+n-1位置到0位置逆序依次存入。时间复杂度:O(m+n),空间复杂度:O(m)。
题解
思路
- 二分查找。时间复杂度:O(logn),空间复杂度:O(1)。
- 牛顿迭代法。时间复杂度:O(logn),空间复杂度:O(1)。
题解
- 空间换时间,借助哈希表。
- 中间扩展。
思路
- 借助map存储字符的个数,最长回文串长度为字符的最大偶数求和再加一。时间复杂度:O(n),空间复杂度:O(s)。
题解
思路
- 中心扩展法,回文子串长度为奇数、偶数时分别考虑。时间复杂度:O(n^2),空间复杂度:O(1)。
题解
- 迭代。从头开始遍历。
- 递归。使用栈空间,需要额外的空间复杂度。
- 快慢指针。
思路
- 迭代。从头遍历,箭头反转。时间复杂度:O(n),空间复杂度:O(1)。
- 递归。使本节点的下一节点的下一节点改成本节点,原头节点指向NULL。时间复杂度:O(n),空间复杂度:O(n)。
题解
思路
- 快慢指针。时间复杂度:O(n),空间复杂度:O(1)。
题解
思路
- 迭代。时间复杂度:O(m+n),空间复杂度:O(1)。
题解
- 迭代。
- 递归。使用栈空间,需要额外的空间复杂度。
思路
- 迭代。借助队列,先进先出。时间复杂度:O(n),空间复杂度:O(n)。
题解
思路
- 递归。时间复杂度:O(n),空间复杂度:O(n)。
- 迭代。借助队列,先进先出。时间复杂度:O(n),空间复杂度:O(n)。
题解
思路
- 一个栈用于push,一个栈用于pop。插入:时间复杂度:O(1),空间复杂度:O(1)。删除:时间复杂度:O(n),空间复杂度:O(n)。
题解