随笔分类 - 算法题解
摘要:一 挑战字符串 1 无重复字符的最长子串(见leetcode bug free) 2 最长公共前缀(见leetcode bug free) 3 字符串的排列 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 示例1: 输入: s1 = "ab" s2 = "eidba
阅读全文
摘要:不包含jiuzhang ladders中出现过的题。如出现多个方法,则最后一个方法是最优解。 目录: 1 String 2 Two pointers 3 Array 4 DFS && BFS 5 Math 6 Dynamic Programming 7 Data Structure 8 Binary
阅读全文
摘要:Wiggle Subsequence 最长扭动子序列 思路1:动态规划。状态dp[i]表示以nums[i]为末尾的最长wiggle子序列的长度。时间是O(n^2). 1 public class Solution { 2 public int wiggleMaxLength(int[] nums)
阅读全文
摘要:Different Ways to Add Parentheses 加括号的不同方式 思路:分治地求出一个运算符的左边部分和右边部分的结果,将它们两两组合运算。优化的方式是用一个hash表记录所有字串的中间结果,避免重复计算。 1 public class Solution { 2 Map<Stri
阅读全文
摘要:Bulb Switcher 灯泡开关 思路:除了平方数以外,其他所有位置的灯泡最终都被开关了偶数次,因此最终都为0。问题等价于求1~n中平方数的个数。 1 public class Solution { 2 public int bulbSwitch(int n) { 3 return (int)M
阅读全文
摘要:Bitwise AND of Numbers Range 实现范围内的按位与 思路:首先将m与n做按位与得到tmp。对于tmp中为0的位,则最终结果也一定为0;对于tmp中为1的位,则要看m到n中间有没有数的这一位为0,方法是:将m的这一位及其低位全部置1得到数a,如果a<n,则说明m到n中间存在这
阅读全文
摘要:Substring with Concatenation of All Words 寻找所有词连接的子串 思路:由于该字串是所有词典中的词连接的,所以该字串长度固定。因此本题可以看作一个滑动窗口的题。为了去除重复工作,每次滑动一个单词的长度,因此起始位置就有n种(n为单词长度)。每种起始位置的滑动策
阅读全文
摘要:Best Time to Buy and Sell Stock 只能买1次的股票问题 思路:遍历数组的同时,记录到当前天为止的历史最低价格,那么在当前天卖出的最大收益就是当前价格减去历史最低价格,同时更新历史最大收益。 1 public class Solution { 2 public int m
阅读全文
摘要:Copy List with Random Pointers 复制带随机指针的链表 思路1:使用哈希表,需要消耗O(N)的额外空间。 1 public class Solution { 2 /** 3 * @param head: The head of linked list with a ran
阅读全文
摘要:Count Complete Tree Nodes 完全二叉树的节点数 思路:这道题使用暴力法为O(n)会超时。使用二分的思想,首先求出左右子树的深度,如果它们的深度相同,则说明左子树为满树,它的节点数可由公式2^h-1求得;如果不相同,说明右子树为满树,同样可用公式求得它的节点数。然后再递归的去求
阅读全文
摘要:Arithmetic Slices 算术片的个数 思路(最优解):序列型dp。每次记录一下以当前数为末尾的算术片的最大长度以及数的等差值。下一次就能求出算术片增加的个数。使用滚动指针来优化。时间复杂度O(n),空间复杂度O(1)。 1 public class Solution { 2 public
阅读全文
摘要:Additive Number 加法数 思路:一开始以为要用DP来做,但是这道题除非能保证每个相加数的划分是唯一的(事实上不是唯一的),否则只能用搜索。 1 public class Solution { 2 public boolean isAdditiveNumber(String num) {
阅读全文
摘要:Animal Shelter 宠物收养所 思路:要使各项操作都为O(1),应该使用linkedHashMap(插入查找删除都是O(1),还记录了顺序关系)及两个队列。 public class AnimalShelter { ListNode head; ListNode tail; Queue<I
阅读全文
摘要:题目: 给一个包含了'(' 和 ')'的字符串,求出其中最长有效括号的长度。 做题情况:自己做出来,但做了较长的时间。 思路:可以算得穷举法的时间复杂度为O(n^3)。虽然这题求的是最长的长度,但是用不了动态规划,因为无法找到一个合适的状态。考虑能不能在O(n)内实现,即遍历一次字符串。发现可以通过
阅读全文
摘要:总结:对二叉树应用分治法时,应避免定义多个递归函数,当出现需要递归求解多种的结果时,尽量使用ResultType来让一次递归返回多种结果。 题目:Binary Tree Maximum Path Sum 给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间
阅读全文

浙公网安备 33010602011771号