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

浙公网安备 33010602011771号