随笔分类 -  leetcode

摘要:class Solution { //建图,bfs public boolean canFinish(int numCourses, int[][] prerequisites) { if(prerequisites.length==0)return true; int[] inDegree=new 阅读全文
posted @ 2021-10-09 20:19 wsshub 阅读(51) 评论(0) 推荐(0)
摘要:并查集注意两点: 建立边关系用join; 边关系建立完之后也要对每个节点做一个找父亲的动作,因为边关系的建立仅仅在原父节点之间确定,而原父节点下的子节点无法及时知晓新的父节点是谁。 比如有A节点,B节点,B节点下有b1,b2,b3。建立边关系时仅仅是让A变成B的父亲,这就结束了,但是b1,b2,b3 阅读全文
posted @ 2021-08-25 01:58 wsshub 阅读(66) 评论(0) 推荐(0)
摘要:并查集的父节点数组正确建立的关键是: 用union(join)建立边关系。 并查集一般用来数连通图个数。 class Solution { public int findCircleNum(int[][] isConnected) { int[] parent=new int[isConnected 阅读全文
posted @ 2021-08-25 00:08 wsshub 阅读(81) 评论(0) 推荐(0)
摘要:注意数字越界。 十叉树的前序遍历问题。 十叉树的节点值:1的孩子有10,11.....19,10的孩子有100,101,102...109。 cur指向当前节点值。 高效办法是,计算以cur为根的子树的节点个数,就可以知道往右走还是往子树走了。 计算节点值的方法是按层计算。 class Soluti 阅读全文
posted @ 2021-08-16 00:01 wsshub 阅读(72) 评论(0) 推荐(0)
摘要:三种解法:dfs到记忆化递归再到动态规划 dfs(超时): class Solution { public int minimumTotal(List<List<Integer>> triangle) { return dfs(triangle,0,0); } int dfs(List<List<I 阅读全文
posted @ 2021-08-09 18:41 wsshub 阅读(51) 评论(0) 推荐(0)
摘要:滑动窗口: class Solution { public int minSubArrayLen(int target, int[] nums) { int i=0; int j=0; int sum=0; int min=Integer.MAX_VALUE; while(j<nums.length 阅读全文
posted @ 2021-08-07 20:35 wsshub 阅读(57) 评论(0) 推荐(0)
摘要:class Solution { //nums[mid]要么在较大一半 //要么在较小一半 //注意范围缩减至两个和一个的时候的处理就行了 public int findMin(int[] nums) { //if(nums.length==1)return nums[0]; int lo=0; i 阅读全文
posted @ 2021-08-01 21:16 wsshub 阅读(59) 评论(0) 推荐(0)
摘要:优秀题解: 从抛硬币开始,循序渐进把这道题吃透!看不懂算我输! /** * The rand7() API is already defined in the parent class SolBase. * public int rand7(); * @return a random integer 阅读全文
posted @ 2021-08-01 00:43 wsshub 阅读(67) 评论(0) 推荐(0)
摘要:回溯(耗时大): class Solution { int ans=0; public int findTargetSumWays(int[] nums, int target) { dfs(nums,0,target,0); return ans; } void dfs(int[] nums,in 阅读全文
posted @ 2021-07-27 00:33 wsshub 阅读(56) 评论(0) 推荐(0)
摘要:0-1背包问题类似 二维dp: class Solution { public boolean canPartition(int[] nums) { int sum=0; for(int num:nums){ sum+=num; } if(sum%2!=0)return false; int tar 阅读全文
posted @ 2021-07-25 11:04 wsshub 阅读(54) 评论(0) 推荐(0)
摘要:速度比较: 做完整的快排<<<不做完整的快排<<自建堆<不做完整的且随机选择哨兵的快排 贴上最快的代码: class Solution { int[] nums; public int findKthLargest(int[] nums, int k) { this.nums=nums; quick 阅读全文
posted @ 2021-07-24 15:54 wsshub 阅读(66) 评论(0) 推荐(0)
摘要:hashmap+自建堆 class Solution { public int[] topKFrequent(int[] nums, int k) { HashMap<Integer,Integer> map=new HashMap<>(); for(int i=0;i<nums.length;i+ 阅读全文
posted @ 2021-07-24 15:37 wsshub 阅读(62) 评论(0) 推荐(0)
摘要:非递归的解法无语了,根本不是模仿递归。 递归解法两条链总是几乎一样个数的,题解的非递归解法,可能会出现个数悬殊的情况。 非递归: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListN 阅读全文
posted @ 2021-07-16 00:57 wsshub 阅读(50) 评论(0) 推荐(0)
摘要:环形链表 public class Solution { public boolean hasCycle(ListNode head) { if(head==null)return false; ListNode p1=head; ListNode p2=head; do{ p1=p1.next; 阅读全文
posted @ 2021-07-03 15:29 wsshub 阅读(56) 评论(0) 推荐(0)
摘要:非递归实现,且空间复杂度O(n): class Solution { public void flatten(TreeNode root) { LinkedList<TreeNode> sta=new LinkedList<>(); TreeNode p=root; TreeNode pre=nul 阅读全文
posted @ 2021-06-13 18:16 wsshub 阅读(58) 评论(0) 推荐(0)
摘要:先序:(每个节点左下延伸,沿途依次访问,且沿途依次将右孩子入栈。不能左下时,让出栈节点执行前面的过程) class Solution { public List<Integer> preorderTraversal(TreeNode root) { LinkedList<Integer> ans=n 阅读全文
posted @ 2021-06-12 20:23 wsshub 阅读(143) 评论(0) 推荐(0)
摘要:学习交换元素的另一种写法 void swap(int[] nums,int x,int y){ if(x==y)return;//重要,没有这一句当x==y时两个都变成0 nums[x]=nums[x]^nums[y]; nums[y]=nums[x]^nums[y]; nums[x]=nums[x 阅读全文
posted @ 2021-06-12 15:01 wsshub 阅读(46) 评论(0) 推荐(0)
摘要:二刷有自己的思路,就是代码繁琐了 class Solution { //二分查找的中间值 //如果比右边大,说明在翻转部分。 //此时若nums[mid]比target大,在左边找还是右边找? //target比最左边小的话就去右边找。比最左边大去左边找 //此时若nums[mid]比target小 阅读全文
posted @ 2021-06-08 19:36 wsshub 阅读(63) 评论(0) 推荐(0)
摘要:class Solution { //二刷没想到用动态规划。 public int longestValidParentheses(String s) { if(s.equals(""))return 0; int[] dp=new int[s.length()]; char[] ss=s.toCh 阅读全文
posted @ 2021-06-08 14:58 wsshub 阅读(41) 评论(0) 推荐(0)
摘要:二刷之后的代码简洁多了。 括号问题关键在于“合法括号匹配:当前左括号数大于等于右括号数” class Solution { List<String> ans=new LinkedList<>(); public List<String> generateParenthesis(int n) { // 阅读全文
posted @ 2021-06-07 19:53 wsshub 阅读(55) 评论(0) 推荐(0)