剑指offer
Huglight
这个作者很懒,什么都没留下…
展开
-
NowCoder 二叉树的下一个结点
题意:给出一个带父结点的二叉树中的一个结点,求出中序遍历中该结点的下一个结点思路:可以先找出根结点,之后进行中序遍历,如果当前结点的前一个结点为所给结点,那这个结点就是答案/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; Tre...原创 2020-02-12 00:04:34 · 85 阅读 · 0 评论 -
NowCoder 删除链表中重复的结点
题意:给一个排序链表,要求删除其中的所有重复结点(包括自身),返回删除后的头结点思路:主要有几个要注意的点,一个是头结点也可能重复,重复完后的下一个值不同的结点还可能接着重复,需要找到第一个不重复的结点,再从这个结点往后找,记录最后一个不重复的结点,没有重复的时候更新这个结点,否则找到下一个不重复结点,将其连接起来,直到处理到链表末尾即可public class Solution { ...原创 2020-02-11 23:49:37 · 100 阅读 · 0 评论 -
NowCoder 表示数值的字符串
题意:给一个字符串,判断该字符串是否表示数值思路:表示数值就那么几个条件:e或E之前最多只能有一个小数点,只能有一个e或E,且后面为整数,符号位只能在第一位或e和E后第一位,依次判断就行public class Solution { public boolean isNumeric(char[] str) { int start = 0, cnt = 0; ...原创 2020-02-10 23:21:46 · 147 阅读 · 0 评论 -
NowCoder 正则表达式匹配 递归
题意:给一个原串和一个模式串,’.‘表示匹配任意一个字符,’*'表示前面字符可以出现任意次,如"aaa"可由"a.a"或"ab *aa"匹配,求模式串是否匹配原串思路:若某个位置没有".",后面也没有" * “,而两字符又不同,则不匹配,否则前后找下一字符。难点在处理有” * "的情况,因为可以匹配任意次,故可以不匹配或者匹配特定次数,而次数未知,故可先匹配一次,模式串位置不变,原串位置加1,递...原创 2020-02-10 22:03:05 · 122 阅读 · 0 评论 -
NowCoder 求1+2+3+...+n 递归
题意:求1加到n的和,要求不能用乘除,以及分支跳转循环如if else while for switch case等语句思路:这里用到一个巧妙的特性:&& 判断前面不符合就不会执行后面的语句,这样可以在递归的时候不用if就可以判断是否到达结束条件public class Solution { public int Sum_Solution(int n) { ...原创 2020-02-08 22:00:03 · 178 阅读 · 0 评论 -
NowCoder 不用加减乘除做加法 进制运算
题意:求两个数的和,要求不能用加减乘除思路:二进制做加法时,1和1加或0和0加都是0,1和0加或0和1加都是1,相当于异或运算,但还要解决进位问题,1和1加时下一位产生进位,相当于各位相与向左移,之后再将进位和异或和再次异或直到没有进位public class Solution { public int Add(int num1,int num2) { int sum,...原创 2020-02-08 22:58:18 · 99 阅读 · 0 评论 -
NowCoder 数组中只出现一次的数字 异或运算
题意:一个数组中有两个数字只出现了一次,其他都出现了两次,找出这两个数字思路:用Map存储数字出现次数复杂度也不高,但是没有完全按照题意要求来做,正确的做法是用异或运算,将数组中所有数字异或起来,所有相同的数字会抵消,只剩下两个只出现一次的不同的数字,这时可以找到异或结果二进制中第一个1,把原数组划分成两个子数组,即在那位带1和不带1的,之后再次在两个数组异或求出两数public class ...原创 2020-02-03 22:59:13 · 152 阅读 · 0 评论 -
NowCoder 数组中的逆序对 归并排序
题意:给一个数组,求出数组中存在的逆序对的个数,逆序对即两数中前面的数字大于后面的数字思路:暴力枚举很简单,复杂度为O(n²),可以用归并排序的性质,归并后两个子数组中设前面为i,后面为j,若array[i]>array[j],则i到mid的数即为当前可知逆序对数(排序完后前面数组i到mid的数都比i位置的大,故排序前乱序时前面数组相对后面数组逆序对也有这么多),将所有子数组的逆序对统计即...原创 2020-02-02 19:08:13 · 126 阅读 · 0 评论 -
NowCoder 平衡二叉树 递归
题意:给一棵二叉树,判断其是否平衡二叉树思路:平衡二叉树两子树的最大高度差不能超过1,可以递归求两子树的最大高度,如果两子树高度差大于1,则树不平衡,若已知某子树不平衡,则不用继续递归直接返回结果public class Solution { public boolean IsBalanced_Solution(TreeNode root) { return solve...原创 2020-02-03 22:52:42 · 95 阅读 · 0 评论 -
NowCoder 树的子结构 递归
题意:给两棵树A、B,问B是否是A的子结构,空树不是任何树的子结构思路:最简单的是用递归深搜,判断当前两树结构是否相同,或者大树左右子树是否和小树相同即可public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if (root2 == null || root1...原创 2020-01-27 21:13:22 · 120 阅读 · 0 评论 -
NowCoder 二叉搜索树的后序遍历序列 递归
题意:给一串序列,判断该序列是否某二叉树的后序遍历序列思路:后序遍历最后一个节点为根节点,前面的都可以分成连续的两部分,一部分比根节点小,另一部分比根节点大,依次分块递归判断两部分是否连续即可public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if (sequence ...原创 2020-01-30 15:48:59 · 152 阅读 · 0 评论 -
NowCoder 调整数组顺序使奇数位于偶数前面 指针
题意:给一个数组,要求使数组中奇数位于偶数前面且奇数与奇数,偶数与偶数之间相对位置不变思路:可以用额外空间的话很简单,开一个数组存奇数或者偶数即可;要求原地更改的话可以用指针,一个存偶数开始位置,另一个存偶数结束位置,每遇到一个偶数向后遍历直到遇到奇数,再把这个奇数放到开头,其余偶数元素向右移1位,复杂度O(n²)public class Solution { public void ...原创 2020-01-24 11:58:14 · 118 阅读 · 0 评论