
剑指offer
北顾江野
当你的能力撑不起你的野心的时候,就应该静下心来学习
展开
-
位运算剖析——二进制中1的个数
什么是位运算: 位运算是把数字用二进制表示之后,对每一位上0和1的运算。 二进制是指:把数字的每一位都是0或者1。比如十进制的2转换为十进制为10,而十进制的10转化为二进制为1010。与、或、异或的运算规律: 左移运算符 m << n 表示把 m 左移 n 位。 在左移 n 位的时候,最左边的 n 位将会被丢弃,同...原创 2018-12-03 01:14:25 · 1047 阅读 · 0 评论 -
旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如{1,2,3,4,5}是{3,4,5,1,2}的一个旋转,该数组的最小值为1。解题思路:对于这个已经排序的数组,仔细看其实是由两个排序的数组组成,我们取其中间的那个值就会发现,如果它落在前面那个有序的数组,那么它的值一定会大于该数组的第一个值并且大于后面那个...原创 2018-11-28 13:49:48 · 105 阅读 · 0 评论 -
菲波那契数列
题目:求斐波那契数列的第n项写一个函数,输出n,求斐波那契数列的第n项,斐波那契数列的定义如下:第一种思路: 运用递归来解,以求解分f(10)为例,必须先要求得f(9)和f(8),同样要求得f(9),必须先要求得分f(8)和f(7)....依次类推,如下图:如上图中,在树中,遍历节点求值时,会发现很多的节点是重复的,而且节点是数是重复会随着n的增大而急剧增...原创 2018-11-28 14:22:46 · 233 阅读 · 0 评论 -
从尾到头打印链表
题目:输入一个链表的头节点,从头到尾反过来打印出每个节点的值。链表节点定义如下:Struct ListNode{int m_nKey;ListNode*m_pNext;};思路:在不改变原来链表的结构时,我们可以用递归来实现这个函数。当每访问到一个节点的时候,先递归输出它后面的节点,再输出该节点自身。逆置链表再打印就OK了。代码:#include<...原创 2018-11-28 13:46:38 · 106 阅读 · 0 评论 -
替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we are happy”,则输出“we%20are%20happy”。解题思路:转换的规则是在 %后面跟上ASCII码的两位十六进制的表示。即为 原来一个空格字符现在要替换成 ‘%’, ’2’, ’0’这三个字符,原本一个空格字符占用一个字节,现在将会增加空格2个字节,所以现在总的字符串会变长,即增加 空格数*2...原创 2018-11-28 13:37:56 · 106 阅读 · 0 评论