随笔分类 -  LeetCode

摘要:对于该题,我本来兴致勃勃地想到了两个优化,但从提交结果来看根本看不出来有什么区别,但我发4我说的都是真的 -3- 阅读全文
posted @ 2019-10-20 22:18 dodoBehind 阅读(185) 评论(0) 推荐(0)
摘要:这道题让我从早做到晚-3-…… 设len=words[0].length()。 一开始我按照words的顺序扩大区间,发现这样就依赖words的顺序。之后改成遍历s的所有长度为len*words.length的区间,超时,因为没有重复利用信息,只是单纯的暴力,每次i++移动一个单位是无法重复利用信息 阅读全文
posted @ 2019-10-20 22:18 dodoBehind 阅读(156) 评论(0) 推荐(0)
摘要:不禁让我想起了计算机是怎样进行除法运算的,单独考虑溢出以及边界情况,单独考虑符号,其他过程和我们小学除法是一模一样的:左移除数(十进制就是扩大十倍,二进制扩大两倍),直到正好比被除数小,一边累加商(在我的代码里就是33行)一边减小被除数,直到被除数不能减小,右移除数,重复上述过程。 阅读全文
posted @ 2019-10-20 08:23 dodoBehind 阅读(149) 评论(0) 推荐(0)
摘要:1 public int removeElement(int[] nums, int val) { 2 int last = nums.length - 1; 3 for (int i = 0; i <= last && last >= 0; i++) { 4 while (last >= 0 && nums[last] == val) last--; 5 if (last >= 0 && i < 阅读全文
posted @ 2019-09-30 22:14 dodoBehind 阅读(161) 评论(0) 推荐(0)
摘要:复用left[],【时间击败73.33%】——》【时间击败99.72%】 【内存击败36.17%】——》【内存击败94.23%】 dfs(r)返回值=new long[]{包括r节点的子树所有节点的最小值,包括r节点的子树所有节点的最大值} 阅读全文
posted @ 2019-09-25 17:03 dodoBehind 阅读(206) 评论(0) 推荐(0)
摘要:public List<Integer> inorderTraversal(TreeNode root) { ArrayList<Integer>al=new ArrayList<>(); if (root==null)return al; al.addAll(inorderTraversal(root.left)); al.add(root.val); al.addAll(inorderTrav 阅读全文
posted @ 2019-09-25 11:53 dodoBehind 阅读(114) 评论(0) 推荐(0)
摘要:1 public TreeNode pruneTree(TreeNode root) { 2 dfs(root,null,-1); 3 return root; 4 } 5 6 public void dfs(TreeNode cur, TreeNode fa, int left) { 7 if (cur == null) return; 8 if (check(cur)) { 9 if (lef 阅读全文
posted @ 2019-09-25 11:35 dodoBehind 阅读(138) 评论(0) 推荐(0)
摘要:1 public List> printTree(TreeNode root) { 2 ArrayList> al = new ArrayList(); 3 if (root == null) return al; 4 if (root.left == null && root.right == null) { 5 ... 阅读全文
posted @ 2019-09-25 11:00 dodoBehind 阅读(178) 评论(0) 推荐(0)
摘要:数组替代队列,从超时到击败70%,用tree[0]替代new一个新的ArrayList,上升10% 思想是遍历一遍,删除度为1的节点,答案只可能为1或2 阅读全文
posted @ 2019-09-25 09:58 dodoBehind 阅读(196) 评论(0) 推荐(0)
摘要:因为二叉搜索树的左子树<根<右子树的性质,按right-root-left的顺序遍历很容易求出累加和 阅读全文
posted @ 2019-09-24 11:35 dodoBehind 阅读(137) 评论(0) 推荐(0)
摘要:1 public boolean isSameTree(TreeNode p, TreeNode q) { 2 if (p==null&&q==null)return true; 3 if (p==null||q==null)return false; 4 return check(p, q); 5 } 6 7 ... 阅读全文
posted @ 2019-09-24 10:22 dodoBehind 阅读(171) 评论(0) 推荐(0)
摘要:1 boolean ans = false; 2 3 public boolean isSubtree(TreeNode s, TreeNode t) { 4 if (t == null) return true; 5 if (s == null) return false; 6 dfs(s, t); 7 ... 阅读全文
posted @ 2019-09-24 10:16 dodoBehind 阅读(128) 评论(0) 推荐(0)
摘要:1 public int removeDuplicates(int[] nums) { 2 //返回值len的长度用++方便,因为填充一个值可能删除很多值 3 //初始化为1,填充则len++ 4 int len = 1; 5 OUT: 6 for (int i = 0, p = 0; i < nu 阅读全文
posted @ 2019-09-23 19:27 dodoBehind 阅读(146) 评论(0) 推荐(0)
摘要:抱歉,我就是交换了值,用数组保存的,没想到过了 -3-…… 1 public ListNode reverseKGroup(ListNode head, int k) { 2 ListNode p = head, p2 = p; 3 int[]a=new int[k]; 4 5 if (p == n 阅读全文
posted @ 2019-09-23 18:53 dodoBehind 阅读(162) 评论(0) 推荐(0)
摘要:1 public ListNode swapPairs(ListNode head) { 2 if (head == null || head.next == null) return head; 3 ListNode a = head, b = head.next, c, last = null; 阅读全文
posted @ 2019-09-23 18:49 dodoBehind 阅读(159) 评论(0) 推荐(0)
摘要:原本是“逐一两两合并链表”,用时118ms,换成假分治后只用4ms,震惊!代码其实就是把遍历换成了队列…… 关键代码变化: “分治”: 1 static public ListNode mergeKLists(ListNode[] lists) { 2 if (lists == null || li 阅读全文
posted @ 2019-09-23 18:17 dodoBehind 阅读(128) 评论(0) 推荐(0)
摘要:f(n)="("+f(n-1)+") +f(i)f(n-i) +f(n-i)f(i) 举个例子: f(2)="("+f(1)+")" +"()"f(1) +f(1)"()" 1 import java.util.ArrayList; 2 import java.util.HashSet; 3 imp 阅读全文
posted @ 2019-09-23 17:31 dodoBehind 阅读(147) 评论(0) 推荐(0)