![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
sleeping_113
每天进步一点点。。。
展开
-
《剑指Offer》第二版之数组中重复的数字(二)
目录问题思路步骤代码问题:在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。思路:从头到尾依次扫描这个数组中的每个数字。当扫描到下标为i的数字时,首先比较这个数字(用m...原创 2019-05-01 17:52:54 · 219 阅读 · 0 评论 -
《剑指Offer》第二版之数组中出现次数超过一半的数字(十三)
目录题目思路步骤代码题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组{1, 2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。思路:数组中有一个数字出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字出现的次数的和还要多。因此,我们可以考虑在遍历到下一个数字的时候,如果...原创 2019-05-04 17:07:57 · 180 阅读 · 0 评论 -
《剑指Offer》第二版之合并两个排序的链表(十二)
目录题目思路步骤代码题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。例如,输入链表1:1、3、5、7,链表2:2、4、6、8,则合并之后的升序链表如链表3:1、2、3、4、5、6、7、8所示。链表节点定义如下:struct ListNode{ int value; ListNode next;}思路:首先分析合并两个链表的过程。我...原创 2019-05-04 12:03:58 · 213 阅读 · 0 评论 -
《剑指Offer》第二版之反转链表(十一)
目录题目思路步骤代码题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。链表节点定义如下:struct ListNode{ int value; ListNode next;}思路我们需要定义3个指针,分别指向当前遍历到的节点、它的前一个节点及后一个节点。步骤:略代码:package test;public class ...原创 2019-05-04 10:08:24 · 179 阅读 · 0 评论 -
《剑指Offer》第二版之链表中倒数第k个节点(十)
目录题目思路步骤代码题目:输入一个链表,输出该链表中倒数第k个节点,为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个节点。例如,一个链表有6个节点,从头节点开始,他们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。链表节点定义如下:struct ListNode{ int m_nValue; ListNode m_pNext;...原创 2019-05-04 09:31:12 · 151 阅读 · 0 评论 -
《剑指Offer》第二版之调整数组顺序使奇数位于偶数前面(九)
目录题目思路步骤代码题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:这道题目要求把奇数放在数组的前半部分,偶数放在数组的后半部分,因此所有的奇数应该位于偶数的前面。也就是说,我们在扫描这个数组的时候,如果发现有偶数出现在奇数的前面,则交换它们的顺序,交换之后就符合要求了。步骤:1.在初始化...原创 2019-05-03 16:00:51 · 137 阅读 · 0 评论 -
《剑指Offer》第二版之旋转数组的最小数字(八)
目录题目思路步骤代码题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。思路:我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而前面子数组的元素都大于或者等于后面子数组的元素。我们还注意到最小的元素刚...原创 2019-05-03 15:10:33 · 102 阅读 · 0 评论 -
《剑指Offer》第二版之斐波那契数列(七)
目录题目思路步骤代码题目:求斐波那契数列的第n项。思路:先把已经得到的数列中间项保存起来,在下次需要计算的时候我们先查找一下,如果前面已经计算就不要在重复计算了。步骤:1.首先根据f(0)和f(1)算出f(2)。2.再根据f(1)和f(2)算出f(3)......以此类推就可以算出第n项了。代码:package test;public class Fibo...原创 2019-05-03 12:23:21 · 229 阅读 · 0 评论 -
《剑指Offer》第二版之用两个栈实现队列(六)
目录题目思路步骤代码题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。template <typename T> class CQueue{public : CQueue(void); ~CQueue(void); void appendTai...原创 2019-05-03 09:44:43 · 105 阅读 · 0 评论 -
《剑指Offer》第二版之重建二叉树(五)
目录题目<a href =- “#thinking”>思路步骤代码题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建如图2.6所示的二叉树并输出它的头节点。二叉树节点的定义如下:stuct ...原创 2019-05-03 09:01:13 · 105 阅读 · 0 评论 -
《剑指Offer》第二版之从尾到头打印链表(四)
目录题目思路步骤代码题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。链表节点定义如下:struct ListNode { int m_nkey; ListNode* m_pNext;}思路解决这个问题肯定要遍历链表。遍历的顺序是从头到尾,可输出的顺序却是从尾到头。也就是说,第一个遍历到的节点最后一个输出,而最后一个遍历到的节点第一个输出。这就是典型的...原创 2019-05-02 16:55:47 · 117 阅读 · 0 评论 -
《剑指Offer》第二版之替换空格(三)
目录题目思路步骤代码题目:请实现一个函数,把字符串中的每个空格替换成”%20“,例如,输入“We are happy.”,则输出“We%20are%20happy.”。思路:我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。步骤:1.我们...原创 2019-05-02 16:09:29 · 91 阅读 · 0 评论 -
《剑指Offer》第二版之实现Singleton模式(一)
这种写法被称为“双重检查锁”,顾名思义,就是在getSingleton()方法中,进行两次null检查。看似多此一举,但实际上却极大提升了并发度,进而提升了性能。为什么可以提高并发度呢?就像上文说的,在单例中new的情况非常少,绝大多数都是可以并行的读操作。因此在加锁前多进行一次null检查就可以减少绝大多数的加锁操作,执行效率提高的目的也就达到了。原创 2019-04-29 22:58:10 · 99 阅读 · 0 评论