
刷题
日更
trhflybingo
这个作者很懒,什么都没留下…
展开
-
10. 正则表达式匹配
classSolution{intls,lp;publicbooleanisMatch(Strings,Stringp){ls=s.length();lp=p.length();returnmatch(s,p,0,0);}privatebooleanmatch(Strings,Stringp,inti,intj){if(j=...原创 2020-12-03 19:35:21 · 159 阅读 · 0 评论 -
301. 删除无效的括号
classSolution{//用集合存储所有正确的字符串,可避免重复privateSet<String>set=newHashSet<>();publicList<String>removeInvalidParentheses(Strings){char[]ss=s.toCharArray();intopen=0,close=0;//...原创 2020-12-02 21:33:51 · 226 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
class Solution { public List<Integer> findAnagrams(String s, String p) { char[] arrS = s.toCharArray(); char[] arrP = p.toCharArray(); // 接收最后返回的结果 List<Integer> ans = new ArrayList<>(); ...原创 2020-11-30 15:38:58 · 268 阅读 · 0 评论 -
128. 最长连续序列
classSolution{publicintlongestConsecutive(int[]nums){Set<Integer>num_set=newHashSet<Integer>();for(intnum:nums){num_set.add(num);}intlongestStreak=0;f...原创 2020-11-28 19:41:25 · 148 阅读 · 0 评论 -
76. 最小覆盖子串
classSolution{publicStringminWindow(Strings,Stringt){Map<Character,Integer>map=newHashMap<>();for(inti=0;i<t.length();i++){charc=t.charAt(i);map.put(c,map.getOrDefault(c,0)+1)...转载 2020-11-28 16:11:09 · 80 阅读 · 0 评论 -
2020-11-25
classSolution{publicdoublefindMedianSortedArrays(int[]nums1,int[]nums2){intm=nums1.length,n=nums2.length;intleft=(m+n+1)/2;intright=(m+n+2)/2;return(find(nums1,0,nums2,0,left)...原创 2020-11-25 21:29:25 · 103 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
publicbooleansearch(Stringword){//查找单词Trieroot=this;charw[]=word.toCharArray();for(inti=0;i<w.length;++i){if(root.next[w[i]-'a']==null)returnfalse;root=root.next[w[i]-'a'];}...原创 2020-11-24 14:50:17 · 95 阅读 · 0 评论 -
437. 路径总和 III
class Solution { public int pathSum(TreeNode root, int sum) { // key是前缀和, value是大小为key的前缀和出现的次数 Map<Integer, Integer> prefixSumCount = new HashMap<>(); // 前缀和为0的一条路径 prefixSumCount.put(0, 1); // 前缀和的递...原创 2020-11-21 11:40:04 · 79 阅读 · 0 评论 -
31. 下一个排列
题干的意思是:找出这个数组排序出的所有数中,刚好比当前数大的那个数比如当前 nums = [1,2,3]。这个数是123,找出1,2,3这3个数字排序可能的所有数,排序后,比123大的那个数 也就是132如果当前 nums = [3,2,1]。这就是1,2,3所有排序中最大的那个数,那么就返回1,2,3排序后所有数中最小的那个,也就是1,2,3 -> [1,2,3]class Solution { public static void nextPermutation(int[] ..原创 2020-11-20 11:12:01 · 104 阅读 · 0 评论 -
240. 搜索二维矩阵 II
classSolution{publicbooleansearchMatrix(int[][]matrix,inttarget){if(matrix.length==0||matrix[0].length==0){returnfalse;}introw=0;intcol=matrix[0].length-1;while(row<matrix.l...原创 2020-11-19 15:44:21 · 78 阅读 · 0 评论 -
215. 数组中的第K个最大元素
classSolution{publicintfindKthLargest(int[]nums,intk){intlen=nums.length;PriorityQueue<Integer>res=newPriorityQueue<>(len,(a,b)->a-b);for(inti=0;i<len;i++){res.add(n...原创 2020-11-18 11:34:13 · 99 阅读 · 0 评论 -
79. 单词搜索
public boolean exist(char[][] board, String word) { char[] words = word.toCharArray(); for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { //从[i,j]这个坐标开始查找 if (dfs(board, words,...原创 2020-11-17 18:42:34 · 192 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化
publicclassCodec{//Encodesatreetoasinglestring.publicStringserialize(TreeNoderoot){if(root==null){return"";}Queue<TreeNode>queue=newLinkedList<TreeNode>();...原创 2020-11-16 10:38:50 · 64 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(intx){val=x;}*}*/classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot...转载 2020-11-12 19:39:04 · 74 阅读 · 0 评论 -
33. 搜索旋转排序数组
划分mid,再用二分排序classSolution{publicintsearch(int[]nums,inttarget){intlow=0,high=nums.length-1,mid=0;//初始化while(low<=high){//相等时只有一个数mid=low+(high-low)/2;if(nums[mid]==target)...原创 2020-11-11 18:04:31 · 70 阅读 · 0 评论 -
32. 最长有效括号
classSolution{publicintlongestValidParentheses(Strings){intmax=0;Deque<Integer>stack=newArrayDeque<>();stack.add(-1);for(inti=0;i<s.length();i++){//s.length()if(s.charAt(i...转载 2020-11-10 14:56:01 · 72 阅读 · 0 评论 -
39. 组合总和
classSolution{publicList<List<Integer>>combinationSum(int[]candidates,inttarget){intlen=candidates.length;List<List<Integer>>res=newArrayList<>();if(len==0)returnres;//r...转载 2020-11-09 11:31:46 · 73 阅读 · 0 评论 -
312. 戳气球
classSolution{//动态规划5ms99.82%publicintmaxCoins(int[]nums){intdp[][]=newint[nums.length][nums.length];if(nums.length==0){//沙雕测试用例[]return0;}for(inti=0;i<nums.length;i++){...转载 2020-11-09 10:50:36 · 84 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置
classSolution{publicint[]searchRange(int[]nums,inttarget){intn=nums.length;if(nums==null||n==0)returnnewint[]{-1,-1};intfirst=findFirst(nums,target);if(first==-1)returnnewint[]{-1,-1};...转载 2020-11-09 10:20:16 · 92 阅读 · 0 评论 -
48. 旋转图像
classSolution{publicvoidrotate(int[][]matrix){//顺时针旋转,逆时针转换,分圈交换上下左右intadd=0;inttemp=0;intpos1=0;intpos2=matrix[0].length-1;while(pos1<pos2){add=0...原创 2020-11-07 10:12:49 · 57 阅读 · 0 评论 -
72. 编辑距离
太难了classSolution{intminDistance(Strings1,Strings2){intm=s1.length(),n=s2.length();int[][]dp=newint[m+1][n+1];//basecasefor(inti=1;i<=m;i++)dp[i][0]=i;for(intj=1;j&...转载 2020-11-06 10:03:19 · 67 阅读 · 0 评论 -
96. 不同的二叉搜索树
假设 n 个节点存在二叉排序树的个数是 G (n),令 f(i) 为以 i 为根的二叉搜索树的个数,则G(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n)G(n)=f(1)+f(2)+f(3)+f(4)+...+f(n)当 i 为根节点时,其左子树节点个数为 i-1 个,右子树节点为 n-i,则f(i) = G(i-1)*G(n-i)f(i)=G(i−1)∗G(n−i)综合两个公式可以得到 卡特兰数 公式G(n) = G(0)*G(n-1)+G(1)*(n原创 2020-11-05 14:44:14 · 135 阅读 · 0 评论 -
49. 字母异位词分组
returnnewArrayList<>();//不需要具体定义Arrays.sort(c);//Arrays.sort//Stringsort_s=String.valueOf(c);,char没有toStringpublic List<List<String>> groupAnagrams(String[] strs) { //边界条件判断 if (strs == null ||...原创 2020-11-04 16:09:53 · 151 阅读 · 0 评论 -
560. 和为K的子数组
classSolution{publicintsubarraySum(int[]nums,intk){intn=nums.length;Map<Integer,Integer>m=newHashMap<>();m.put(0,1);intans=0,sum_0_i=0;for(inti=0;i<n;i++){...转载 2020-11-04 15:22:08 · 50 阅读 · 0 评论 -
22. 括号生成
当前左右括号都有大于 00 个可以使用的时候,才产生分支;产生左分支的时候,只看当前是否还有左括号可以使用;产生右分支的时候,还受到左分支的限制,右边剩余可以使用的括号数量一定得在严格大于左边剩余的数量的时候,才可以产生分支;在左边和右边剩余的括号数都等于 00 的时候结算。curStr 当前递归得到的结果 * @param left 左括号还有几个可以使用 * @param right 右括号还有几个可以使用 * @param res 结果集树状...原创 2020-11-04 09:55:19 · 107 阅读 · 0 评论 -
3. 无重复字符的最长子串
classSolution{publicintlengthOfLongestSubstring(Strings){//滑动窗口intn=s.length(),ans=0;Map<Character,Integer>map=newHashMap<>();for(intstart=0,end=0;end<n;end++){charss=s.charAt(en...原创 2020-11-03 10:04:44 · 107 阅读 · 0 评论 -
2. 两数相加
/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(intx){val=x;}*}*/classSolution{publicListNodeaddTwoNumbers(ListNodel1,ListNodel2){intcar...原创 2020-11-02 11:33:06 · 138 阅读 · 0 评论 -
146. LRU缓存机制
publicclassLRUCache{classDLinkedNode{intkey;intvalue;DLinkedNodeprev;DLinkedNodenext;publicDLinkedNode(){}publicDLinkedNode(int_key,int_value){key=_key;value=_value;}...转载 2020-11-02 10:59:06 · 275 阅读 · 0 评论 -
207. 课程表
classSolution{publicbooleancanFinish(intnumCourses,int[][]prerequisites){//【1,2】,[3,4]int[]indegree=newint[numCourses]; //入度数组List<List<Integer>>edg=newArrayList<>(...原创 2020-11-02 10:42:24 · 71 阅读 · 0 评论 -
124. 二叉树中的最大路径和
对于任意一个节点, 如果最大和路径包含该节点, 那么只可能是两种情况: 1. 其左右子树中所构成的和路径值较大的那个加上该节点的值后向父节点回溯构成最大路径 2. 左右子树都在最大路径中, 加上该节点的值构成了最终的最大路径classSolution{privateintres=Integer.MIN_VALUE;publicintmaxPathSum(TreeNoderoot){getMax(root);...原创 2020-10-30 15:41:27 · 68 阅读 · 0 评论 -
494. 目标和
原问题等同于: 找到nums一个正子集和一个负子集,使得总和等于target我们假设P是正子集,N是负子集 例如: 假设nums = [1, 2, 3, 4, 5],target = 3,一个可能的解决方案是+1-2+3-4+5 = 3 这里正子集P = [1, 3, 5]和负子集N = [2, 4]那么让我们看看如何将其转换为子集求和问题: sum(P) - sum(N) = targetsum(P) + sum(N) + sum(P) - sum(N)原创 2020-10-29 17:54:58 · 127 阅读 · 0 评论 -
337. 打家劫舍 III
动态规划+递归无后效性是指如果在某个阶段上过程的状态已知,则从此阶段以后过程的发展变化仅与此阶段的状态有关,而与过程在此阶段以前的阶段所经历过的状态无关。利用动态规划方法求解多阶段决策过程问题,过程的状态必须具备无后效性。 动态规划」通常不关心过程,只关心「阶段结果」,这个「阶段结果」就是我们设计的「状态」。什么算法关心过程呢?「回溯算法」,「回溯算法」需要记录过程,复杂度通常较高。dp[node][j] :这里 node 表示一个结点,以 node 为根结点的树,并且规定了 node 是否...原创 2020-10-28 10:35:56 · 77 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(intx){val=x;}*}*/classSolution{publicTreeNodebuildTree(int[]preorder,int[]in...原创 2020-10-27 16:39:20 · 60 阅读 · 0 评论 -
114. 二叉树展开为链表
/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodeleft,TreeNoderig...原创 2020-10-26 09:42:40 · 70 阅读 · 0 评论 -
102. 二叉树的层序遍历
DFS 不是按照层次遍历的。为了让递归的过程中同一层的节点放到同一个列表中,在递归时要记录每个节点的深度 level。递归到新节点要把该节点放入 level 对应列表的末尾。当遍历到一个新的深度 level,而最终结果 res 中还没有创建 level 对应的列表时,应该在 res 中新建一个列表用来保存该 level 的所有节点。/***Definitionforabinarytreenode.*publicclassTreeNode{*intv...原创 2020-10-24 10:07:01 · 106 阅读 · 0 评论 -
98. 验证二叉搜索树
中序遍历/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(intx){val=x;}*}*/classSolution{longpre=Long.MIN_VALUE;publicboolean...原创 2020-10-23 10:49:05 · 60 阅读 · 0 评论 -
647. 回文子串
classSolution{publicintcountSubstrings(Strings){//中心扩展法intans=0;for(intcenter=0;center<2*s.length()-1;center++){//首先是left,有一个很明显的2倍关系的存在,其次是right,可能和left指向同一个(偶数时),也可能往后移动一个(奇数...转载 2020-10-22 19:05:17 · 73 阅读 · 0 评论 -
416. 分割等和子集
public class Solution { public boolean canPartition(int[] nums) { int len = nums.length; if (len == 0) { return false; } int sum = 0; for (int num : nums) { sum += num; } ...转载 2020-10-21 19:28:23 · 66 阅读 · 0 评论 -
5. 最长回文子串
classSolution{publicStringlongestPalindrome(Strings){intlen=s.length();if(len<2)returns;boolean[][]dp=newboolean[len][len];char[]charArray=s.toCharArray();intb...转载 2020-10-20 19:15:02 · 182 阅读 · 0 评论 -
322. 零钱兑换
//和上一个类似classSolution{publicintcoinChange(int[]coins,intamount){int[]dp=newint[amount+1];Arrays.fill(dp,amount+1);//arraysdp[0]=0;for(intc:coins){for(inti=c;i<=amount;i++){...原创 2020-10-19 17:16:02 · 54 阅读 · 0 评论