摘要: 这道题的关键是知道找到尾节点的前一个节点必须遍历,而且这样做了之后总的时间复杂度还是O(1),以及如何不破坏链表删除一个已知节点 阅读全文
posted @ 2019-09-30 10:53 CrazyJack 阅读(169) 评论(0) 推荐(0)
摘要: 书中方法:这道题的一个陷阱在于不能用int或者long去存储你要打印的数,然后用打印函数打印,因为这个数可能会很大。如果加1后超出了最大的n位数,就不打印了。用最高位是否进位判断是否结束,打印的时候注意不要打印出前面可能出现的0. public void print(int n){ if(n=0; 阅读全文
posted @ 2019-09-30 10:34 CrazyJack 阅读(218) 评论(0) 推荐(0)
摘要: 书中方法:这道题要注意底数为0的情况。double类型的相等判断。乘方的递归算法。 public double power(double base, int exponent){ //指数为0 if(exponent == 0){ return 1.0; } //底数为0 if(isEqual(ba 阅读全文
posted @ 2019-09-30 10:20 CrazyJack 阅读(137) 评论(0) 推荐(0)
摘要: 书中方法一:对于每一位,用1求与,如果为1表明该位为1。一共要进行32次,int4字节32位。 public int check(int a){ int result = 0; int judge = 1; int count = 1; //左移31次,一共32位 while(count 阅读全文
posted @ 2019-09-30 10:13 CrazyJack 阅读(152) 评论(0) 推荐(0)
摘要: 书中方法一:递归,这种方法效率不高,因为可能会有很多重复计算。 public long calculate(int n){ if(n 阅读全文
posted @ 2019-09-30 10:10 CrazyJack 阅读(182) 评论(0) 推荐(0)
摘要: (找递增排序旋转数组中的最小数字) 书中方法:这种题目就是要寻找数组的特点,然后根据这个特点去写。旋转后的递增数组分为两段递增序列,我们找到中点,如果比第一个元素大,表示在第一段递增序列里,如果比第一个元素小,表示在第二段递增序列里。这样就可以用递归或迭代完成。需要注意的一点是如果中间元素和第一个元 阅读全文
posted @ 2019-09-30 10:06 CrazyJack 阅读(116) 评论(0) 推荐(0)
摘要: 书中方法:队列是先进先出的,栈是先进后出的,试想把一串数压入A栈,接着一个个出栈并压入B栈,便会完成“头在下”到“头在上”的转变。B栈内还有元素时,直接出栈表示出列,如果没有元素则将A栈内元素压入B栈内。这个没有测试,省略了异常抛出。 题目7扩展:用两个队列实现实现栈 书中方法:由于用两个队列并不能 阅读全文
posted @ 2019-09-30 09:46 CrazyJack 阅读(132) 评论(0) 推荐(0)
摘要: (由一个二叉树的前序和中序序列重建一颗二叉树) 书中方法:我们要重建一棵二叉树,就要不断地找到根节点和根节点的左子结点和右子节点。注意 前序序列 , 它的第一个元素就是二叉树的根节点,后面的元素分为它的左子树的前序遍历和右子树的前序遍历。现在的问题是如果光靠前序序列,我们只能找到根节点,但是 我们不 阅读全文
posted @ 2019-09-26 11:40 CrazyJack 阅读(263) 评论(1) 推荐(0)
摘要: 书中方法一: 反转应该立刻想到栈 ,利用一个栈完成链表的反转打印,但是用了额外的O(n)空间。 书中方法二:利用 递归 ,在递归中先调用递归,后处理该节点,达到了栈的效果。 阅读全文
posted @ 2019-09-26 11:20 CrazyJack 阅读(97) 评论(0) 推荐(0)
摘要: (给一个足够长的字符数组,其中有一段字符,将' '(空格)替换成’%’ ‘2’ ‘0’三个字符,原字符段由’\0’结尾) 书中方法:这道题如果从头到尾扫描数组并替换,会涉及到数组的移动。如果不移动元素,从头到尾处理似乎没有什么思路。看到题目给的 足够长 的数组,我们要联想到 从后往前 处理的方式。我 阅读全文
posted @ 2019-09-26 11:05 CrazyJack 阅读(118) 评论(0) 推荐(0)