九度 Online Judge 之《剑指 Offer》一书相关题目解答

  前段时间准备华为机试,正好之前看了一遍《剑指 Offer》,就在九度 Online Judge 上刷了书中的题目,使用的语言为 C++;只有3题没做,其他的都做了。

  正如 Linus Torvalds 所言“Talk is cheap, show me the code!",详见托管在 Github 的源码:点击打开链接(核心部分有注释)。

  难度总结:有些可以不必要像书中那样保存中间结果,直接输出,也就可以不使用书中的算法;有些题目在书中题目的基础上加了更多的要求,也更难实现一点。

九度 Online Judge 之《剑指 Offer》一书相关题目解答

时间: 2024-10-10 17:43:43

九度 Online Judge 之《剑指 Offer》一书相关题目解答的相关文章

倒着处理的思维--包含字符串匹配和九度1510 替换空格 剑指offer03

倒着来是处理字符串等的一个不错的技巧.举个例子,和这道题无关的,但是难度和意义都是更好的. 比如非完全匹配,就是差一个字符不匹配 那么其实有一种复杂度还不错的做法: 模式串:aacb 需要匹配的字符串: 1.aamb 2.acb 3.aamdb 这个时候其实可以先正向匹配,算出来匹配的字符的个数p1,再反向匹配,算出来匹配的个数p2,然后看p1+p2与模式串的长度的关系 恩,以上...还没做过具体题目 再看这道题,也是倒着处理字符串的思路:O(n)处理掉 #include <cstdio> #

剑指Offer(书):替换空格

题目:请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析:通常来说,这样的题有两种方式.空间换时间,时间换空间.但是这个有更好的算法.可以先计算空格的次数,然后计算最后的长度,有两个下标,分别表示原串最后的位置和结果串最后的位置,我们从后向前推,遇到空格就补充%20,同时结果串的下标依次前移,遇不到就将原串的当前下标的值给结果串下标的值,同时两者下标前移,直到原串下标移到开

剑指Offer(书):重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 分析:递归的本质就是将大问题不断分解为相同类型的小问题,直到找到一个出口为止.这里,根据前序和中序的性质找到1为根节点,那么就可以分解为2,4,7与4,7,2,即长度变短了.之后依次求解其他的. public TreeNode reConstructBin

剑指Offer(书):用两个栈实现队列

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析:入栈时只入栈1,出栈为栈2:若栈2不为空,直接出栈:否则,将栈1中的值依次入栈2,之后栈2出栈 Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(n

剑指Offer(书):数值的整数次方

题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 分析: * 要注意以下几点:* 1.幂为负数时,base不能为0,不然求的时候是对0取倒数,会发生除0异常.* 2.0的0次幂无意义,无特殊说明,一般来说是1. public double power(double base, int exponent) { if (exponent == 0) { return 1.0; } if (exponent == 1) { retur

剑指Offer(书):反转链表

题目:输入一个链表,反转链表后,输出新链表的表头. 分析:要分清他的前一个节点和后一个节点,开始的时候前节点为null,后节点为head.next,之后,反转. public ListNode ReverseList(ListNode head) { if (head == null) { return null; } if(head.next==null){ return head; } ListNode preNode = null; ListNode currentNode = head;

剑指Offer(书):顺时针打印数组

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 分析:书上的变量有点多,看不大懂,这里借助了一个辅助数组,用来判定已经访问过的节点. package com.gjjun.jzoffer;import java.util.ArrayList; import java.ut

《剑指offer》题解

有段时间准备找工作,囫囵吞枣地做了<剑指offer>提供的编程习题,下面是题解收集. 当初没写目录真是个坏习惯(-_-)||,自己写的东西都要到处找. 剑指Offer - 九度1524 - 复杂链表的复制 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先 剑指Offer - 九度1508 - 把字符串转换成整数 剑指Offer - 九度1504 - 把数组排成最小的数 剑指Offer - 九度1503 - 二叉搜索树与双向链表 剑指Offer - 九度1390 - 矩形覆盖 剑

【剑指offer】字符串的组合

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26405471 剑指offer上的拓展题目,输入一个字符串,输出该字符串的字符的所有组合,比如输入字符串:abc,输出a.b.c.ab.ac.bc.abc. 思路:与上一题类似,也可以用递归求解.可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m).原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和.对于求C(n, m),从第一个字符开始扫描,每个字符有两种