牛客网刷题
qq_43641886
这个作者很懒,什么都没留下…
展开
-
二叉树的序列化
差不多搞了两个半小时,终于出来了,目前最大的问题是 在LeetCode上不停的调试和试错,才能得出最终答案,在敲代码的过程中会犯各种各样的毛病,而且对二叉树的序列化不是很清楚,判别条件上也总是出错,总之就是很菜使用的是层序遍历,也就是BFS/** * Definition for a binary tree node. * public class TreeNode { * in...原创 2020-02-19 18:06:11 · 107 阅读 · 0 评论 -
二叉搜索树的双向链表
条件:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。根据二叉搜索树的性质,我们要采取中序遍历的方法,这与链表中翻转链表相似,都是利用指针的性质进行的采用了分治算法时间复杂度nlognclass Solution {//创建头指针,前一个指针,尾指针 Node head=null,pre=null,tail=n...原创 2020-02-18 17:29:15 · 106 阅读 · 0 评论 -
单词搜索
这道题主要使用了回溯的方法,遍历了整个数组,class Solution { char[][] board; String word; int xlen; int ylen; public boolean exist(char[][] board, String word) { //进行初始条件判断 if(word==null|...原创 2020-02-16 18:06:13 · 109 阅读 · 0 评论 -
和为s的连续正数序列
这道题我想了很久最后发现一个规律,如果target,要求得他的n个连续序列和,我们可以从初始开始{1,2,3,4…n},求和得sum,int diff=target-sum,如果diff小于零,则直接判负,如果diff%n==0,则存在n个连续正数序列满足条件 {1+diff/n,2+diff/n,…}详情见代码时间复杂度为最坏O(n^2)import java.util.ArrayLis...原创 2020-02-16 16:36:19 · 105 阅读 · 0 评论 -
把数组排成最小数
该题的关键就是将数字转换为字符串,并且使用lamda表达式进行比较,import java.util.ArrayList;import java.util.Arrays;public class Solution { public String PrintMinNumber(int [] numbers) { String[] str=new String[num...原创 2020-02-15 18:10:52 · 87 阅读 · 0 评论 -
正则表达式匹配
LeetCode上的测试用例并没有"**",首先我们要分为三种情况s.charAt(i)==p.charAt(j) ||p.charAt(j) =='.'则进行下一个字符的判断p.charAt(j)=='*',则需要对前面的值进行判断 1. 如果j为起点,则i,j+1 2. s.charAt(i)==p.charAt(j-1) ||p.charAt(j-1) =='.' 1. 分三...原创 2020-02-15 16:50:27 · 162 阅读 · 0 评论 -
正则表达式入门
实践出真知^[-+]?\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?$^ The beginning of a line $ The end of a line ^ 和 美元符号框定正则表达式,它指引这个正则表达式对文本中的所有字符都进行匹配。如果省略这些标识,那么只要一个字符串中包含一个数字这个正则表达式就会进行匹配[-+]? one or more ...原创 2020-02-12 11:34:03 · 256 阅读 · 0 评论 -
剪绳子
有一种害怕是你自己看着害怕,这道题看着很复杂,但是用动态规划的思想是很容易解答出来的//创建全局变量,剪枝 int[] ref; public int cutRope(int target) { this.ref=new int[target+1]; //创建辅助函数 return helper(target); ...原创 2020-02-08 16:52:03 · 75 阅读 · 0 评论 -
删除排序链表中的重复元素
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode deleteDuplication(ListNode pH...原创 2020-02-07 15:25:23 · 84 阅读 · 0 评论 -
字符串排列
import java.util.ArrayList;import java.util.Arrays;public class Solution { public ArrayList<String> Permutation(String str) { int len=str.length(); ArrayList<String> ...原创 2020-02-06 17:36:53 · 106 阅读 · 0 评论 -
孩子们的游戏
这道题很简单,使用bo标志位和list数组进行双指针计算,import java.util.List;import java.util.ArrayList;public class Solution { public int LastRemaining_Solution(int n, int m) { //当孩子为0时,返回-1 if(n==0)retur...原创 2020-02-06 17:35:10 · 178 阅读 · 0 评论 -
矩阵覆盖
这与跳台阶问题是一个套路,一次选择跳一个还是跳两个,这个矩阵覆盖也只有两种选择,一是横着放一次占用两格,二是竖着放但是一次占用四格public int RectCover(int target) { if(target==0){ return 0; } if(target==1){ return 1;...原创 2020-02-06 15:41:10 · 121 阅读 · 0 评论 -
滑动窗口的最大值
该题考察滑动一数组框时,最大值的变化,我们可以使用双指针来进行滑动灵感来自于LeetCode长度最小的子数组中的利用双指针将时间复杂度降为O(n),详情看代码import java.util.ArrayList;public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int si...原创 2020-02-05 17:56:18 · 112 阅读 · 0 评论 -
二叉搜索树的第K个结点
我是使用了中序遍历的方法,如果想要更快,可以让List直接与k进行判断,满足则跳出递归(在LeetCode上可以使用该法)public class Solution { TreeNode KthNode(TreeNode pRoot, int k) { List<TreeNode> ln=new ArrayList<...原创 2020-02-04 17:38:45 · 103 阅读 · 0 评论 -
链表中环的入口结点
我使用的利用哈希表来判断入口结点没有达到LeetCode上进阶的要求,public ListNode detectCycle(ListNode head) { if(head==null){ return null; } if(head.next==null){ return null; ...原创 2020-02-04 16:54:27 · 119 阅读 · 0 评论 -
数组中重复的数字
这是令人费解的一道题条件所有数都必须在0~n-1之间numbers!=null ???取第一个重复的数做法使用哈希表 public boolean duplicate(int numbers[],int length,int [] duplication) { if(numbers==null){ return false; ...原创 2020-02-04 16:53:15 · 135 阅读 · 0 评论 -
两个链表的第一个公共结点
这一题从LeetCode上的删除链表的倒数第n结点获得解题方法,利用两个链表前后遍历,中间间隔n个结点找出要删除的结点设定一个哑点,避免删除第一个结点时的尴尬,时间复杂度为O(max(p1.length,p2.length))public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { List...原创 2020-02-03 15:47:43 · 80 阅读 · 0 评论 -
数字1的个数
搞了一个小时多终于搞出来了判断每一位出现1的概率特殊情况 1 0通过找规律得到答案如果为零count+=n*cs;如果为1count+=cur%cs+pre/10*cs+1;其他数count+=(n+1)*cs; public int countDigitOne(int n) { if(n<1) return 0; ...原创 2020-02-02 18:01:11 · 289 阅读 · 0 评论 -
构建乘积数组
第一种方法是使用两层循环 当i!=j时B[i]*=B[i]*A[j],时间复杂度为O(n^2) public int[] multiply(int[] A) { int[] B=new int[A.length]; for(int i=0;i<A.length;i++){ B[i]=1; ...原创 2020-02-02 16:21:07 · 94 阅读 · 0 评论 -
最大子序和
这道题使用暴力解法很容易得出结果 可是时间复杂度为O(n^ 2)所以我们采取动态规划的方法,我还是不太明白,可能是数学没学好吧 if(nums.length==0){ return -1; } int sum=0; int ans=Integer.MIN_VALUE; //遍历数组 时间复杂度为O(n...原创 2020-01-30 15:40:12 · 97 阅读 · 0 评论 -
旋转数组中的最小数字
这道题感觉坑还是很多的,我有很多条件都没有考虑清楚if判断条件 对mid 和high 还有low 的递增和递减 盲目的去设计,导致执行多次都没有成功 public int minNumberInRotateArray(int [] array) { if(array.length==0){ return 0; } ...原创 2020-01-22 17:31:07 · 79 阅读 · 0 评论 -
数值的整数次方
我使用的是最笨的方法,遍历判断边界条件 base 0 和exponent0然后对exponent进行判断,大于还是小于零进行遍历输出结果public class Solution { public double Power(double base, int exponent) { if(base==0){ return 0; ...原创 2020-01-22 16:41:59 · 114 阅读 · 0 评论 -
爱奇艺2020校招Java方向笔试题
Java中sleep()与wait()区别设计责任链 setNext//设置下一个处理者是谁接口和抽象类可以被new嘛?——顺便总结内部类设计模式笔记–责任链模式原创 2020-01-20 17:58:13 · 383 阅读 · 0 评论