摘要: (输入两棵二叉树A和B,判断B是不是A的子结构。补充下,根据书中的代码来看,子结构的定义并不包括叶子节点下的null,也就是说只要B的存在数字的结构存在于A中就行,那么如果B是null树,那么就不属于A的子结构) 书中方法:书上的方法十分清晰,分为两个步骤,先在A树中找到B树的root.val,然后 阅读全文
posted @ 2019-09-30 11:41 CrazyJack 阅读(340) 评论(0) 推荐(0)
摘要: 我的方法:新初始化一个链表头,比较两个链表当前节点的大小,然后连接到该链表中。遍历两个链表直到null为止。 public ListNode merge(ListNode first, ListNode second){ //注意这个细节 ListNode head = new ListNode(0 阅读全文
posted @ 2019-09-30 11:34 CrazyJack 阅读(127) 评论(0) 推荐(0)
摘要: (输入链表的头节点,反转链表) 书中方法:对于一个链表,我们只能从头往后遍历,如果要反转,我们需要更改当前节点的next域指向前一个节点,此时链表断开,为了能继续修改下一个节点的next域,我们还要维护下一个节点。 方法二:书后面还提到了 递归 的方法。自己写的逻辑比较不清楚,在网上找了一个版本。这 阅读全文
posted @ 2019-09-30 11:26 CrazyJack 阅读(180) 评论(0) 推荐(0)
摘要: 书中方法:用两个节点一次遍历求得倒数第k个节点。注意头节点为空,k 阅读全文
posted @ 2019-09-30 11:23 CrazyJack 阅读(164) 评论(0) 推荐(0)
摘要: (输入整数数组,使所有奇数位于前半部分,所有偶数位于后半部分。) 我的方法:想到用两个下标分别表示奇数和偶数的界线,一个在开头,一个在末尾,判断每一个数字的类别,然后将它放入对应的范围内,移动下标,直至两个下标相遇。两个下标,第一个index表示当前要检测的数字以及其左边的数字为奇数(所以当前要检测 阅读全文
posted @ 2019-09-30 11:05 CrazyJack 阅读(516) 评论(0) 推荐(0)
摘要: 这道题的关键是知道找到尾节点的前一个节点必须遍历,而且这样做了之后总的时间复杂度还是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)