《代码面试指南》
文章平均质量分 70
《代码面试指南》书中所有例题代码,持续更新
cherrybomb1994
但行好事,莫问前程
展开
-
计算1^1+2^2+3^3+4^4+5^5+……+20^20 ,大数运算(加,乘)java实现
这个题目是明显的大数运算,不能直接使用int long double 早就超出范围了,要用数组结合字符串进行处理,分别实现大数的加法和乘法,然后使用实现的加法和乘法写出来n的n次幂的实现,最后 把它们加起来首先存进来就是要用string来存贮,运算的时候按位运算,charAt(i)-'0'来取值。注意一点,string改成char[]数组的时候要变成反序操作,因为对于一个数组是要从左到右,相加放值...转载 2018-03-26 14:49:30 · 3480 阅读 · 2 评论 -
删除链表的中间节点 / 删除链表a/b处的节点
一、删除中间节点:要求:删除中间节点的函数思路:本题并不是让你取得中间位节点,而是删除,所以关键是取得中间点的前一位。正常取中值用快慢指针,head.next,与,head.next.next。所以我们需要把慢指针前移一位,就变成了headpublic class text { public Node deleteMid(Node head) { if(head==null||h...原创 2018-04-03 15:45:04 · 1226 阅读 · 0 评论 -
翻转部分单向链表
题目:给定一个头结点head,以及两个整数from,to,在单链表上翻转第from个到第to个节点思路:可能存在换头的状态,例如1->2->3, from=1,to= 3,最后头结点会变,为3->2->1。所以要提前判断一下有没有换头的情况发生,即from,to与链表首尾长度的关系。 接下来要找到from-1,与to+1个节点。其实如果from-1==null就说明了会出...原创 2018-04-03 21:31:52 · 847 阅读 · 0 评论 -
求二叉树的深度和宽度[Java]
求二叉树的深度和宽度[Java]这个是常见的对二叉树的操作。总结一下:设节点的数据结构,如下:class TreeNode { char val; TreeNode left = null; TreeNode right = null; TreeNode(char _val) { this.val = _val; }}1.转载 2017-09-21 10:14:38 · 1155 阅读 · 0 评论 -
java 求二叉树的深度 / 节点总数
1.判断根节点是否为空2.递归获取左子树的深度3.递归获取右子树的深度[java] view plain copy public int hight(Node node){ if(node==null){ return 0; }else{ int i=hight(node转载 2017-09-22 10:45:48 · 3017 阅读 · 0 评论 -
java 判断一棵二叉树是否为平衡二叉树
题目:输入一棵二叉树的根节点,判断该树是不是平衡的二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树的深度相差不超过1,按照定义它就是一棵平衡的二叉树。这种思路实现的代码如下:转载 2017-09-22 11:30:07 · 966 阅读 · 1 评论 -
单链表排序----(快排+归并+插入)
public static void quicksort(Node begin,Node end){ if(begin!=end){ Node partition=getpartition(begin,end); quicksort(begin,partition); quicksort(par...原创 2018-03-22 15:42:11 · 252 阅读 · 0 评论 -
设计一个有getMin功能的栈
要求:设计一个new class,实现push,pop,getMin,复杂度O(1)思路:两个栈一起用,一个做正常栈使用(normalStack),一个用于存放最小值(minStack),minStack中随着normal中的压入一起,当它为空的时候压入第一个元素,不空的时候,只压入比栈顶元素小的。pop的时候也是,如果normal中pop的比min中栈顶元素大,min不操作,若相等,一起pop更...原创 2018-03-24 16:09:47 · 141 阅读 · 0 评论 -
两个栈组成队列
要求:编写一个类,用两个栈来实现队列的基本操作,add , poll , peek思路:一个push栈,一个pop栈。注意不用每次都更新pop栈,若pop栈里还有上次push进来剩下的,就继续用,顺序是一样的,push栈里什么都不用管,相当于队尾。pop栈的栈顶为队列头总结:return最好不要放在if-else里面,能最后单写就单独写。把判断条件尽可能合并。import java.util.*;...原创 2018-03-24 16:27:18 · 242 阅读 · 0 评论 -
仅用递归函数,栈操作,来逆序一个栈
要求:一个栈依次压入1,2,3,4,5,将其reverse操作,栈内变成5,4,3,2,1。不借助其他数据结构思路:要取得每次的栈底元素,分别为1,2,3,4,5,再压入5,4,3,2,1。 如何取得栈底元素?递归pop,直至栈为空,返回递归最深的那个元素,其他的还要再压回去,否则栈就变了。注意栈底 元素return之后就不压回去了,这样下次递归的时候才能取...原创 2018-03-24 17:23:54 · 759 阅读 · 0 评论 -
猫狗队列
要求:已知有如下的数据结构,实现一种猫狗队列,具有: add:将cat dog 插入队列 pollAll:将所有猫狗按插入顺序移除 pollDog:将所有Dog按插入顺序移除 pollCat:将所有Cat按插入顺序移除 isEmpty:查看是否为空 isDogEmpty:查看Dog元素是否为...原创 2018-03-24 18:28:03 · 227 阅读 · 0 评论 -
用一个辅助栈,来实现另一个栈的排序
要求:将一个栈按从顶到底,从大到小的顺序排序,只许额外申请一个栈来操作思路:如果stack,pop出来的元素比help栈顶小,直接压入。否则,help栈不断弹出元素,直到找到合适的地方再压入。总结:善于总结操作,不要每个情况都写一个if操作,看看内部的操作是不是都一样,一样的话可以提出来一起写。public static void sortStack(Stack<Integer> st...原创 2018-03-24 18:49:09 · 1131 阅读 · 0 评论 -
滑动窗口中的最大值
要求:输入整形数组arr,与窗口大小w。窗口从左滑至最右,输出一个数组,里面每个值代表每种窗口中的最大值思路:1、剑指offer中也有,思路是维护一个双端队列作为窗口。队列中放的是元素标号!!而非元素值!!因为后续要检查者队列长度有没有超过w,直接看队列头的编号与当前比较值的编号差值即可。 2、若当前值大于队列中的某些元素,循环removeLast,并将当前值放入(addLast)。此外还要判断这...原创 2018-03-25 13:42:28 · 1056 阅读 · 0 评论 -
构造数组的MaxTree
要求:给定一个无序的,无重复元素的数组,生成MaxTree,要求每一个根节点处为当前最大值 时间复杂度要求O(n),空间复杂度O(n)思路:一开始第一个想法是排序,在生成二叉排序树之类的,堆排序递归之类的,但是题目要求了时间复杂度为O(n),这些方 法都超了。但是题目没有要求生成的MaxTree一定为完全二叉树之类的,只要符合根节点最大,所以,我们可以自己规定MaxTree的特...原创 2018-03-25 16:29:54 · 372 阅读 · 0 评论 -
打印两个有序链表的公共部分
要求:给出两个有序单链表的头结点 head1,head2,打印两个链表公共部分思路:因为已经有序,所以直接比较值大小,若1小,1后移,2小,2后移,相等,打印,二者一起后移,继续比较。public void printCommomPart(Node head1,Node head2) { while(head1!=null&&head2!=null) { if...原创 2018-03-25 17:13:43 · 251 阅读 · 0 评论