随笔分类 -  剑指offfer

摘要:前序遍历版(牛客版): public class Solution { StringBuilder path=new StringBuilder(); String Serialize(TreeNode root) { preOrder(root); return path.toString(); 阅读全文
posted @ 2021-06-01 20:23 wsshub 阅读(46) 评论(0) 推荐(0)
摘要:归并排序求逆序对 归并要熟悉 class Solution { //归并排序的应用 int[] nums,number; int cnt=0; public int reversePairs(int[] nums) { this.nums=nums;//这种声明和定义方式借助题解,可以少传递参数 n 阅读全文
posted @ 2021-05-04 17:21 wsshub 阅读(62) 评论(0) 推荐(0)
摘要:快速排序 因为不要求返回数组的顺序,所以可以不做完整的排序 (做完整的快速排序) 完整快排递归版:(在一个函数里实现了快排,而不是像邓书里面那样写成两个) class Solution { //快速排序 //快速选择 //堆排序和快速排序的比较--面试热点 public int[] getLeast 阅读全文
posted @ 2021-04-29 16:20 wsshub 阅读(69) 评论(0) 推荐(0)
摘要:这个题蛮有意思的。学习了大佬的思路。 注意边界情况,当输入空数组时,返回了一个匿名数组的写法。 以及保证数组不越界,及时退出循环的思路。 我原来写的while循环条件是(cnt<num),且没有写退出循环的四个判断,是有问题的。 class Solution { public int[] spira 阅读全文
posted @ 2021-03-18 10:14 wsshub 阅读(42) 评论(0) 推荐(0)
摘要:这题和借鉴了27题的思路,创建一个镜像二叉树然后一一比较。 问题在于,27题实现的代码更改的是原树,更改之后原树也变了。 这是关于指针的理解,在创建一个镜像二叉树时,必须确保是真的创建了而不是在原树上更改,因为还要用到原树。 /** * Definition for a binary tree no 阅读全文
posted @ 2021-03-16 18:21 wsshub 阅读(67) 评论(0) 推荐(0)
摘要:这个题太妙了。递归真的很神奇,有人说一步步理解没必要,好像是的,理解递归函数要实现的功能是关键。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tree 阅读全文
posted @ 2021-03-16 01:07 wsshub 阅读(56) 评论(0) 推荐(0)
摘要:这个题很烦。不告诉什么样的数字是合法的,面向测试用例编程。 最简单的思路。 class Solution { public boolean isNumber(String s) { char[] ss=s.trim().toCharArray(); boolean hasNum=false,hasS 阅读全文
posted @ 2021-03-15 16:41 wsshub 阅读(54) 评论(0) 推荐(0)
摘要:很简单的题,我给想复杂了。无语子。还漏看了l2为null时会导致错误。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { 阅读全文
posted @ 2021-03-15 01:32 wsshub 阅读(51) 评论(0) 推荐(0)
摘要:我真的服了。 关于tmp应该保存什么值,糊涂了,自己画内存图才明白。 tmp应该存的是oldHead.next而不是oldHead。难怪一直在循环里跳不出来。debug好久。 tmp要存将要被改变,但原来的值还要用的变量! /** * Definition for singly-linked lis 阅读全文
posted @ 2021-03-15 00:30 wsshub 阅读(43) 评论(0) 推荐(0)
摘要:这题好难。自己没想到用动态规划,敲了很久,敲出了可以通过400个测试点的代码,还是有一些情况没有考虑到。不舍得删,记录一下。对输入用例 "aaa" "ab*a*c*a" 不能给出正确答案 class Solution { public boolean isMatch(String s, String 阅读全文
posted @ 2021-03-14 20:50 wsshub 阅读(51) 评论(0) 推荐(0)
摘要:快速幂。处理当指数为负数时的情景,还要注意int32的数据范围。 class Solution { public double myPow(double x, int n) { if(x==0) return 0; double res=1; long b=n; if(n<0) { x=1/x; b 阅读全文
posted @ 2021-03-13 13:58 wsshub 阅读(60) 评论(0) 推荐(0)
摘要:这道题绝了,虽然是简单题,但是可以暴露不少问题。 // you need to treat n as an unsigned value public int hammingWeight(int n) { int cnt =0; int tmp; while(n!=0){//!!不可以写成n>0,因 阅读全文
posted @ 2021-03-13 02:14 wsshub 阅读(70) 评论(0) 推荐(0)
摘要:这道题最优解是贪心+快速幂。 但贪心算法还必须清楚背后的数学定理才会有思路,没意思。 学习如何用大数BigInteger和快速幂的代码即可。(虽然我没用到快速幂) 注意必须对数组手动初始化,因为不会帮你默认初始化,不手动初始化在n=10时会出错嗯。 1 import java.math.*; 2 c 阅读全文
posted @ 2021-03-13 01:28 wsshub 阅读(68) 评论(0) 推荐(0)
摘要:我服了。动态规划杀我。 可以说一说解决动态规划的思路(只做了两三道就总结了emmm) 关键词:最长/最短/最多等最值问题,计数问题,是否存在问题。 1.识别动态规划问题 --重叠子问题:大问题可以分为一个个子问题。和分治策略分割的子问题不同(分治问题的子问题是相互独立的),动态规划的子问题是相互重叠 阅读全文
posted @ 2021-03-12 22:32 wsshub 阅读(87) 评论(0) 推荐(0)
摘要:本题如果用递归做,超时。注意要对结果取余。递归+记忆可以通过。如下: 1 class Solution { 2 int[] arr=new int[101]; 3 {//这里不加大括号会报错 4 Arrays.fill(arr,-1); 5 } 6 public int fib(int n) { 7 阅读全文
posted @ 2021-03-10 22:42 wsshub 阅读(62) 评论(0) 推荐(0)
摘要:1 class CQueue { 2 3 int temp,size; 4 LinkedList<Integer> stack1,stack2; 5 public CQueue() { 6 stack1=new LinkedList<>(); 7 stack2=new LinkedList<>(); 阅读全文
posted @ 2021-03-09 22:35 wsshub 阅读(62) 评论(0) 推荐(0)
摘要:递归问题的分析 特点:大问题可以划分为形式相同的小问题; 步骤:明确递归函数要解决的问题/要得到的结果(首先不要考虑问题解决的细节,知道问题是什么很重要); 终止递归的条件; 分析问题隐含的等式关系。 根据前序遍历和中序遍历重建二叉树。 根据前序遍历找到树的根节点--在中序遍历找到这个根节点,根据中 阅读全文
posted @ 2021-03-09 21:16 wsshub 阅读(83) 评论(0) 推荐(0)
摘要:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2]输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 /** * Definition for singly-linked list. * public class Li 阅读全文
posted @ 2021-03-04 20:57 wsshub 阅读(77) 评论(0) 推荐(0)
摘要:题目描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8 阅读全文
posted @ 2021-03-03 19:45 wsshub 阅读(60) 评论(0) 推荐(0)