- 博客(368)
- 资源 (3)
- 收藏
- 关注
原创 let 139. Word Break
主题思想: 判断一个字符串是否能由一个字典中的字符串拼接而成。AC 代码:class Solution { public boolean wordBreak(String s, List<String> wordDict) { boolean [] flag=new boolean[s.length()+1]; flag[0] =tr...
2018-03-22 22:23:17 162
原创 let 137. Single Number II
主题思想: 通用的解决方法, 对于一个数组中,只有一个数出现1次,其他数出现n次这种问题,采用利用位运算的解法, n=2,只出现2次时,很容易想到用异或的解法,本质还是用位运算,如果一个数出现n次,那么这个数的每一个为1的位,出现的次数等于n,如果统计每一个位出现的次数sum, 并对n求模, sum%n, 那么每一个在该位为1的出现n次的数,最后取模都等于0,剩余的位就肯定来自于单独出现的那个...
2018-03-22 21:04:32 115
原创 let 136. Single Number
找出数组中只出现一次的数,其余的数都出现两次。主题思想: 异或的定义,相同为0, 不同为1, 数组里每个数都异或操作,最后肯定是0和只出现一次的那个数异或,任何数和0异或等于数本身。AC代码:class Solution { public int singleNumber(int[] nums) { if(nums.length==1) return nums...
2018-03-22 20:41:33 108
原创 let 135. Candy
主题思想: 正向来一次,反向来一次。AC 代码:class Solution { public int candy(int[] ratings) { if(ratings==null)return 0; if(ratings.length<=1) return ratings.length; int n=ratings.len...
2018-03-21 22:51:10 106
原创 let 134. Gas Station
主题思想: 这个肯定O(n)有些事情需要考虑清楚,如果遇到哪个站点,无法走下去了,肯定需要从下一个站点重新开始才有可能继续走下去。记录下总的气量和花费气量差值,如果小于0,肯定无法完成。class Solution { public int canCompleteCircuit(int[] gas, int[] cost) { if(gas==null||gas...
2018-03-21 22:12:28 99
原创 131. Palindrome Partitioning
主题思想: 回溯法,好久没写,这种套路,再温习下class Solution { public List<List<String>> partition(String s) { List<List<String>> ans=new ArrayList<List<String>>(); ...
2018-03-21 21:25:38 105
原创 let129. Sum Root to Leaf Numbers
主题思想: 一个简单的递归遍历,是后序遍历,先左子树,再由子树,如果一个节点是叶子节点,则返回当前根到叶子节点代表的值,如果是非叶子节点,则返回左右子树和的值AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...
2018-03-17 15:36:47 95
原创 let 128 Longest Consecutive Sequence
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.For example,Given [100, 4, 200, 1, 3, 2],The longest consecutive elements sequence is [1, 2, 3, 4]...
2018-03-17 15:02:45 90
原创 let 121. Best Time to Buy and Sell Stock
主题思想: 直觉应该是到dp问题,不应该是O(n^2)的解法,所以寻找方法进行转化,最后发现如果计算每天的差值,就可以转化为求差值数组的连续最大子数组问题,因此问题得解。AC 代码:class Solution { public int maxProfit(int[] prices) { if(prices==null||prices.length==0) r...
2018-03-12 21:57:16 137
原创 let 116. Populating Next Right Pointers in Each Node
主题思想: 这个还是层级遍历的变形。 层级遍历,需要一个队列数据结构作为辅助,然后记录每个层有多少个节点,来区分属于哪一个层。 只需要对每一层做相同的操作: 把相同层的节点连起来就可以了。 所以代码和层级遍历,相差无几, AC 代码:/** * Definition for binary tree with next pointer. * public class TreeLi
2018-01-30 20:07:25 93
原创 let 116. Populating Next Right Pointers in Each Node
主题思想: 这个还是层级遍历的变形。 层级遍历,需要一个队列数据结构作为辅助,然后记录每个层有多少个节点,来区分属于哪一个层。 只需要对每一层做相同的操作: 把相同层的节点连起来就可以了。 所以代码和层级遍历,相差无几, AC 代码:/** * Definition for binary tree with next pointer. * public class TreeLi
2018-01-30 20:06:06 109
原创 let 116. Populating Next Right Pointers in Each Node
主题思想: 这个还是层级遍历的变形。 层级遍历,需要一个队列数据结构作为辅助,然后记录每个层有多少个节点,来区分属于哪一个层。 只需要对每一层做相同的操作: 把相同层的节点连起来就可以了。 所以代码和层级遍历,相差无几, AC 代码:/** * Definition for binary tree with next pointer. * public class TreeLi
2018-01-30 20:05:01 104
原创 let 115. Distinct Subsequences
主题思想: 这是一道dp题,这里总结下dp的通用套路, dp各种各样,总得需要总结点套路,再在套路基础上变通吧,先学套路。一般dp问题,特别是这种两个字符串的关系, 一般思路是先创建一个表 dp[][] 一般长度多创建一个,为的是存储,空字符串,或者初始化一部分值,或者说dp一般下标是从1开始的。 因为dp一般是dp[i][j]=dp[i-1][j-1] …. 即dp[i][j] 是
2018-01-30 19:46:41 104
原创 let 114. Flatten Binary Tree to Linked List
主题思想: 这种方法有两种方法: 1. 按照提示,按前序顺序记录节点,然后重建树。AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNo
2018-01-30 16:25:39 123
原创 let 113. Path Sum II
主题思想: 递归回溯, 关键点在于什么时候选择回溯,什么时候应该结束。当遇到null 时结束,则应该在遍历完一个节点的左右子树过后,再删除栈顶元素。AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *
2018-01-29 22:56:25 109
原创 let 112. Path Sum
主题思想: 判断是否存在一条根节点到叶子节点的路径,路径上的和等于指定数值。AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int
2018-01-29 22:23:10 105
原创 let 111. Minimum Depth of Binary Tree
主题思想: 递归, 找根节点到叶子节点的最小路径长度。AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val =
2018-01-29 22:07:47 110
原创 let 110. Balanced Binary Tree
主题思想: 递归求解,判断是不是平衡而叉树。AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; }
2018-01-29 21:49:01 102
原创 let 108. Convert Sorted Array to Binary Search Tree
主题思想: 升序有序数组,转成平衡二叉树。利用递归,选取数组中间节点作为根节点。循环构造左右子树。AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * T
2018-01-28 22:41:06 87
原创 let 107. Binary Tree Level Order Traversal II
主题思想: 主要思路还是利用队列进行层次遍历,但是插入时,利用LinkedList 可以指定插入位置的特性,每次都把下一层插到最前面,这样就是一个倒序了。 其他麻烦点方法是: 按照层次全部压入栈中,并记录下对应层次的个数,这样,最后出栈,组装,输出。但是还是第一种利用LinkedList 特性最为方便。AC 代码:/** * Definition for a binary tree
2018-01-28 22:31:33 92
原创 let 106. Construct Binary Tree from Inorder and Postorder Traversal
主题思想: 这题和105 姊妹题,主要思想就是递归,然后利用中序遍历的特点,后序遍历的特点,把原数组,利用起始下标的不同,分割成左右子树,两段,然后递归构造左子树,和右子树。具体AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode
2018-01-28 22:10:32 127
原创 105. Construct Binary Tree from Preorder and Inorder Traversal
主题思想: 经典题,二叉树的构建,利用前序和中序序列进行二叉树的构建。首先采用递归的思想: 从前序序列找根节点,然后去中序序列里面找到根节点的下标,中序序列中在根节点之前的元素构成根节点的左子树节点,之后的构成右子树节点,递归下去。中序序列以根节点为分界分成左右两个部分,这个容易理解,那在前序序列中,又如何分割为左右子树两个部分呢?这个就需要计算在中序中,根节点左边有多少个节点
2018-01-27 17:57:19 100
原创 104. Maximum Depth of Binary Tree
主题思想: 递归计算树的层高。AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } *
2018-01-27 15:50:44 112
原创 let 103. Binary Tree Zigzag Level Order Traversal
主题思想: 我是用栈解决的,还有一种方法是利用递归。 利用栈的AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val
2018-01-27 12:59:27 183
原创 let 102 Binary Tree Level Order
主题思想: 按层打印二叉树, 需要使用队列结构, 难点在于如何表示每层,这里有个技巧,就是每次先记录队列中的容量, 来表示一层的数目,在执行完一层后,应该把上一层的全部从队列中取出,并把下一层的放进队列中。 具体AC 代码:/** * Definition for a binary tree node. * public class TreeNode { * int v
2018-01-27 12:02:02 117
原创 hadoop 学习系列总结(三) hadoop 简易配置,及启动 起步
主题思想: 总结下hadoop 相关的简易设置hadoop 相关的配置文件,主要core-default.xmlcore-site.xmlhdfs-default.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml其中default.xml 无法看到,,根据源码, 会先加载 core-default.xml 然后是c
2018-01-26 17:13:19 231
原创 let 98
主题思想: 二叉树的中序遍历:迭代方式,实现中序遍历,借助栈结构。 中序遍历的二叉树一定是一个,递增序列。模板代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right;
2018-01-22 22:35:22 444
原创 let 97 Interleaving String
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.For example,Given:s1 = "aabcc",s2 = "dbbca",When s3 = "aadbbcbcac", return true.When s3 = "aadbbbaccc", return fals
2018-01-22 21:52:23 369
原创 let 96 Unique Binary Search
主题思想: 这个题也是一个典型,符合动态规划的解法。解法思路是: 先推出前几个数字,然后找其中规律,递推。 再然后,分析,验证。 比如这题,根据根节点的取值不同具体分析, 比如 n=1-4时 dp[1]-dp[4]: 1,2,5,14AC 代码:class Solution { public int numTrees(int n) { int[] d
2018-01-22 20:11:38 97
原创 let 92. Reverse Linked List II
主题思想: 链表翻转:链表翻转, 链表翻转经典代码:public ListNode reverseList(ListNode head){ if(head==null||head.next==null) return head; ListNode prev=null,next=null; while(head.next!=null){ next
2018-01-21 21:35:54 114
原创 let 91 DecodeWays
主题思想: 以后不再手写字符串转 int 了 ,可以用Integer.valueOf(String)动态规划:class Solution { public int numDecodings(String s) { if(s==null||s.length()==0) return 0; int n=s.length(); in
2018-01-21 17:29:41 143
原创 let 90 Subsets II
* 主题思想:* 这题解法是回溯法,典型的搜索题。 和permutation 以及subset是同样类型的题。 这题主要复杂在有相同数字,需要跳过这里记录下一种通用的解法:首先排序,回溯法,搜索搜索中根据题目要求,跳过相同数字AC 代码:class Solution { public ListList> subsetsWithDup(int[] nums) {
2018-01-21 16:28:16 99
原创 let 87 Scramble String
主题思想: 这题主要是暴力,求解,用到递归,一个字符串是不是scramble ,可以归结为子串是不是,然后在分解,分而治之,最后求出。AC 代码:class Solution { public boolean isScramble(String s1, String s2) { if(s1.equals(s2)) return true; int
2018-01-21 15:05:45 158
原创 let 85 Maximal Rectangle
主题思想: 这题是84的升级版,之所以记录这道题是因为,解决这道题的思想,值得学习。可以作为解决类似问题的通用思想。这是二维的,84是一维的, 那么把二维化成1维就实现了降维,这种思想和求最大子序列和,以及求矩阵中最大子序列和是一样的。或者说这道题本身,就和求最大子序列和是类似的题。解法类似。这种思想值得注意,就是解二维题是,通过把数据累加的方式,转化成1维问题, 第一行加上第二行
2018-01-20 21:09:28 244
原创 let 84 Maxmuim Rectange in Historgram
主题思想: 这是一道求最值问题,一般这种问题,是动态规划问题,一种最容易想到的方法是,用一根线扫描,这样有多少个高度就需要多少根线,没扫描一次,O(n) 总的就是 n^2这里利用栈的思想: 如果一个条状,他后面的条高度比他高,那么这个条状肯定不是最大面积的终止条,因为扩展到后面的条面积就增加了,所以,只有出现下降条时,才可能出现最大值。 所以用栈维护一个单调非递减数值,记录下标,遇见当前
2018-01-20 20:52:30 192
原创 let 79 Word search
Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically n
2018-01-17 21:57:05 195
原创 let 78 Subsets
Given a set of distinct integers, nums, return all possible subsets (the power set).Note: The solution set must not contain duplicate subsets.For example,If nums = [1,2,3], a solution is:[ [3
2018-01-17 21:08:06 94
原创 let 77 Combinations
主题思想: : 有序数组,组合, 1…. n 可以抽象为一个有序数组, 题目大意就是从n个元素挑出k个的所有组合。AC 代码: 代码中需要注意的一点就是,java是依靠引用的,在ans.add()时,必须新建list 对象,否则在执行完 dfs 会执行,tmp.remove() 这时,会清楚已经加入到ans的list ,导致ans 结果变成[[],[],[],[],...] 就是因为fo
2018-01-17 18:02:35 144
原创 let 76. Minimum Window Substring
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).For example,S = "ADOBECODEBANC"T = "ABC"Minimum window is "BANC".Not
2018-01-17 16:21:44 114
原创 let 75 Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.Here, we will use the integers 0,
2018-01-16 22:27:38 126
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人