03 2016 档案
摘要:题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 算法思想: 这个题目的思想是通过两个指针分别指向两个链表,递归比较两个链表的值得大小,然后赋值给新建的头结点。直到结束。这里需要注意的就是,我们需要检查两个传进来的链表是否为空; 算法实现: 参
阅读全文
摘要:题目描述: 输入一个链表,反转链表后,输出链表的所有元素。 算法思想: 其实这个题目并不是很难,我们需要注意的就是在一些边界问题的处理上。使它的鲁棒性更好。我们只需记录三个指针,来改变三个指针的值去交换即可。 算法实现:
阅读全文
摘要:题目描述: 输入一个链表,输出该链表中倒数第k个结点。 算法思想: 这种题型应该见过的,一般只要的涉及倒数。我们就需要设置两个指针了。这道题我们需要设置两个指针,先让一个指针向前移动k-1个位置(保持两个指针之间的距离为k-1),然后让第二个指针指向头结点,之后让两个指针同时向后移动,直到前边的指针
阅读全文
摘要:题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 算法描述: 我们需要两个指针,其中一个指向开始(begin),另一个指向最后(end),begin指针只向后移动,
阅读全文
摘要:按照以往的习惯,这种题我们需要遍历整个链表,找到需要删除节点的前一个节点,这样我们就可以操作删除的方法了,这种方法需要O(n)的时间复杂度,但这里要求我们在O(1)的时间下完成。我们只能想其他的方法。 算法思想:其实我们也不需要知道删除节点前一个节点。我们的做法是将删除节点的后边一个节点的值赋给要删
阅读全文
摘要:转载:http://blog.csdn.net/jxh_123/article/details/38364923?utm_source=tuicool&utm_medium=referral 题目描述: 输入数字n,按顺序打印出从1最大的n位十进制数。例如输入3,则打印出1,2,3一直到最大的3位数
阅读全文
摘要:题目描述: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 算法注意事项: 算法并不是很难,但这里要注意对输入的要求进行检查,例如指数是0的情况,底数是0的情况,底数是-1的情况等。所以这里还是要注意很多问题的。下面是代码,从代码中来学
阅读全文
摘要:题目描述: 输入两个整数m, n;计算需要改变你的二进制表示的多少位才能得到另一个数。例如13二进制为1101, 10的二进制为1010.我们需要改变3位才可以。 算法实现:
阅读全文
摘要:下面来简单说一下斐波那契数列的有效率的解法: 我们刚刚接触递归时肯定学习了斐波那契数列这样一个经典的例子,但这里的递归算法有一些效率问题。因为如果我们求fib(100)时。我们会发现产生了许多的重复运算。这些不但消耗着计算时间和资源容易产生栈溢出。这是非常危险的。所以下面介绍一个迭代的算法:(算法不
阅读全文
摘要:题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 算法描述: 如果从头到尾进行扫描的话,时间复杂度为O(n),但这种方法过于简
阅读全文
摘要:今天来简单说一下计数排序: 当要实现一个排序算法要求时间复杂度是O(n),允许使用常量大小的辅助空间,并且数据的大小在一个可控的范围内,就可以使用计数排序了,也就是辅助数组的大小记录数据的个数,然后输出即可; 算法实现:
阅读全文
摘要:总结一下算法的各个方面: 经典算法之 快速排序:http://www.cnblogs.com/dormant/p/5317000.html 经典算法之 简单选择排序:http://www.cnblogs.com/dormant/p/5317140.html 经典算法之 冒泡排序:http://www
阅读全文
摘要:今天最后研究一下二路归并排序 算法思想: 利用递归,将原始序列不断两两分块,知道每块剩下一个元素,这个元素肯定是有序的。然后利用递归的原理合并即可; 二路归并排序的最好,最坏,和平均时间复杂度为O(nlgn);是一种稳定的排序 算法实现:
阅读全文
摘要:下面来说一下堆排序,这个有点复杂; 堆是一种数据结构,可以把它看成一棵完全二叉树,这棵完全二叉树满足任何一个非叶子节点的值都不大于或不小于其左右孩子节点的值,分别叫做大顶堆和小顶堆。 算法思想: 堆排序的算法分为两步:建立堆和排序; 1)建堆: 将序列调整为大顶堆,每一次都是父节点和子节点进行比较然
阅读全文
摘要:今天介绍另外几种排序算法,这里讲一下 简单插入排序: 算法思想:插入排序整体的思想是对有序的数组进行排序,例如拿到一个数组,它的第一个数据肯定是有序的,从第二个数据开始开始和前边的数据 比较,当遇到比它大的数据后就向后移动数据的位置,再次向前比较,直到前边的数据比它小为止,这时就交换两个数据的位置,
阅读全文
摘要:冒泡排序和选择排序一样是我们接触相对早的一种排序算法。下面简单讲解一下冒泡排序的思想: 算法思想: 冒泡排序,顾名思义,排序的过程就像气泡在水里上升一样。就是对数组进行不断地扫描,每当遇到比标记的数据大的元素就交换两个数据。这样扫描一遍之后就会产生一个最小或最大的元素位于最终的位置上。之后进行第二遍
阅读全文
摘要:现在简单来讲一下选择排序的思想: 我们接触选择排序的时间很长了,也是我们编程时需要最先接触的程序。他的思想确实较简单。 算法思想: 选择排序需要针对数组从头到尾进行扫描,其实就是记录下扫描一遍后整个数组的最小元素和最小元素的位置,然后和第一个元素进行交换,这样经过一遍排序我们就可以确定一个元素的最终
阅读全文
摘要:想利用这一两天复习一下几个经典的排序算法,今天先来看一下快速排序: 我们知道快速排序的思想是:先找到一个枢轴,然后进行分块,将其中元素比枢轴小的元素放到枢轴左边,将比他大的放到他的右边,这样我们就完成了一遍基本排序。我们确定了一个数字在排好序的位置;之后利用递归再将枢轴左边的数据分块,将右边的数据分
阅读全文
摘要:题目描述: 利用两个队列实现一个栈,实现先进后出的功能。 算法实现: 算法思想: 我们知道两个队列实现一个栈,其中队列的机制是先进先出,栈的机制是先进后出;那么我们需要驳斥一个队列为空,如果pop数据时需要将有数据的队列的数据存入空的队列,让有数据的队列只剩一个数据就可弹出。具体可以观察代码更加明确
阅读全文
摘要:题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。 算法实现: 思想:将两个栈(我们这里称做stack1, stack2)。stack1用作push操作,stack2用作pop操作。我们知道队列是先进先出,所以如果有数据进队列,将数据压入stack1中,如
阅读全文
摘要:题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列,如果如果题目中所给的前序和中序遍历
阅读全文
摘要:题目描述:输入一个链表,从尾到头打印链表每个节点的值。 算法:
阅读全文
摘要:题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 此类型的算法可以适用于很多方面,像数组的合并。思想是从数组的后边向前合并,而不是从前向后。
阅读全文
摘要:题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解法:
阅读全文
摘要:面试中,面试官问我现场写的一个算法题目:给定一个字符串和一个字符,删除字符串中包含和此字符相同的字符。 算法1: 算法2:(动态分配空间)
阅读全文
摘要:描述:有两个有序数组A,B,内存A在A的末尾有足够多的空间容纳B,实现函数:把B中的所有数字插入到A中,并且保持A中的所有数字是排序的。 解法: 1 #include<stdio.h> 2 #include<string.h> 3 4 void newArray( char stringA[], c
阅读全文
摘要:最近在看Effective C++ ,同时将总结一下里边的重要知识点: ########################## module 1 ########################## 让自己习惯C++ 1.条款01:视C++为一个语言联邦 为了了解C++,必须了解C++的4个主要次语言
阅读全文
摘要:对于Nginx这样一个模块化的服务器,看代码是最好的理解方式了。再此通过读main() 函数来简述一下Nginx的初始化过程: 这就是整个main函数的执行过程;
阅读全文

浙公网安备 33010602011771号