题目:1:输入一个二叉树,求二叉树的深度.从根节点开始最长的路径. 思路:我们可以考虑用递归,求最长的路径实际上就是求根节点的左右子树中较长的一个然后再加上1. 题目2:输入一颗二叉树的根节点,判断该二叉树是不是平衡二叉树.平衡二叉树是这样的数,每一个节点左右子树的深度差不超过1. 思路1:从根节点开始判断,左右子树的节点的深度是否是相差1的.然后递归判断下面的节点. 思路2:采用后序遍历,判断左右子树是否相差不超过1,记住每次左右子树的深度.最后判断根节点是否是平衡的.这样做的好处是避免了重复…
import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; //圆圈中最后剩下的数字 //题目:0,1,2,……n-1,将这n个数排列成一个圆圈,从0开始,删除第m个数,最后一个剩下的数字是多少. //思路1:我们首先可以把它当做一个环形链表.然后模拟一个环形链表. /*思路2:根据数字的规律来求: * 分析2:找规律.首先定义最初的n个数字(…
//扑克牌的顺子 //题目:在一个扑克牌中随机的抽5张牌,看是不是顺子.大小王为0,A为1,J为11,Q为12,K为13.其他数字为自己本身. //思路:大小王可以代表任意一个数字,因此我们在看是不是顺子之前要先对数字进行排序,数出0的个数. //如果相连的两个数字之间相差的总数是超出0的个数,那么就不是顺子,否则就是 public class IsContinue { public void bubbleSort(int[] a){ if(a==null) return; //要进行n-1趟排…
题目:把n个骰子扔到地上,骰子之和为S,输入n,打印s所有可能的值出现的概率. 思路:由于骰子的点数为1~6,因此n个骰子之和的大小为n~6n之间.故可以定义一个数组来存放这6n-n+1个数出现的次数.因为有n个数,每个数有六种可能,因此总的次数为6^n个.让数组中每一个可能的值出现的次数除以总次数,就可以得到对应数的概率.…
题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数. 思路:分别用两个指针指向数组的头start和尾end.如果两个数字之和等于S输出.如果打于,则end--,再次相加.因此循环条件就是start<end.题目2:输入正整数S,打印出所有和为S的的正整数序列.例如:15的正整数序列为:{1,2,3,4,5},{3,4,5,6},{7,8}思路:首先我们确定的是,这个整数序列必须至少有两个数字.可以定义一个头指针start=1,尾指针 end=2.start是要小于(S+1)…
题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数组中的数字都异或,那么那些等的数字异或后都化为0,因此最后出现的不为0的数字就是两个只出现一次的数字他们两个异或的结果.我们找到该结果中的最右边的一个1,然后根据这个1将数组划分为两份. Java代码: //数组中只出现一次的数. //题目:数组中其他的数都是出现两次,有两个数只出现一次. publ…
题目:统计一个数字在排序数组中出现的次数. 思路:采用二分查找,找到该数字在数组中第一次出现的位置,然后再找到组后一个出现的位置.两者做减法运算再加1.时间复杂度为O(logn) Java代码: //数字K在排序数组中出现的次数 //思路:用二分查找,找到第一个k和最后一个K public class NumberCount { public int numberCount(int[] a,int k){ if(a==null) return 0; int start=0; int end=a.…
//不用加减乘除四则运算,来做加法 //题目:两个数做加法. //思路:用二进制的位运算的思路.第一步:首先两数相加考虑进位.可以用异或. //第二步:两个数相加只考虑进位,并将最后的结果左移.第三步:将第一二步的结果相加. public class AddN { public int add(int a,int b){ //递归实现 int sum1=a^b; ; ){ return add(sum1,sum2); } /*循环实现 * int sum1,sum2; do{ sum1=a^b;…
//题目1:翻转单词顺序例如“Hello world!”翻转后为world! Hello. //思路:首先翻转整个字符串,然后再分别翻转每个单词. //题目2:左旋转字符串,是将字符串的前面几个(n)字符放到整个字符串的后面.例如:“helloWorld”,旋转后lloWorldhe //思路:将字符串分成两半分别翻转,然后整个翻转. public class ReverseWord { //翻转一个字符串 public void reverseWord(char[] a,int start,i…