![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
一些算法实现
xcz123321czx
暂时木有
展开
-
002递归——hanoi塔
hanoi塔问题,做为递归思想的经典问题,充分体现了迭代的是人,递归的是神的思想。具体问题我就不再阐述了,直接上代码,其实很久以前就写过了,既然按着计算机算法分析coding,就当再练练手了。//hanoi//by xcz on 2013.7.1#include using namespace std;void hanoi(int n ,char a,char b,cha原创 2013-07-01 22:18:16 · 404 阅读 · 0 评论 -
Microsoft100——14.找数
这几天终于把点标完了,用海洋师兄的话就是,以后再也不想做人脸了~~太痛苦了,都快累闭眼了~~隔了好几天了,中午无聊写了一题题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得他们的和正好是输入的那个数字。要求时间复杂度O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1,2,4,7,11,15和数字15.由于4+11=15,因此输出4原创 2014-01-13 15:05:25 · 477 阅读 · 0 评论 -
Microsoft100——17.出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b.分析:最简单的方法就是不断的循环,得出每一个字符的出现次数,但是这样时间复杂度为O(n2),后来想了几种改进算法,虽然有点进步但时间复杂度任然是O(n2)。最后还是利用哈希表的思想,利用空间换时间的策略,得到了一个很好的方法。因为是一个字符,所以我们建立一个256的数组,利用字符的ASCII码的值为原创 2014-01-17 15:15:30 · 533 阅读 · 0 评论 -
Microsoft100——20.字符转整数
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出例如:输入字符串“345”,则输出整数345代码如下:#include #include #include using namespace std;void main(){ string str; cout<<"输入一个表示整数的字符串" <<endl; cin >> str; int len = s原创 2014-03-10 21:43:48 · 380 阅读 · 0 评论 -
Microsoft100——001.旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称z原创 2014-09-09 19:52:45 · 408 阅读 · 0 评论 -
Microsoft100——002.链表中倒数第K个节点
#includeusing namespace std;struct ListNode{ int value; ListNode *next;};ListNode* AddToTail(ListNode *pHead,int value){ ListNode *pNew = new ListNode; pNew->value = value; pNew->next =原创 2014-09-10 15:23:36 · 315 阅读 · 0 评论 -
Microsoft100——003.链表反转
#includeusing namespace std;struct ListNode{ int value; ListNode *next;};ListNode* AddToTail(ListNode *pHead,int value){ ListNode *pNew = new ListNode; pNew->value = value; pNew->next =原创 2014-09-10 15:59:41 · 293 阅读 · 0 评论 -
Microsoft100——005.合并两个已经排序好的链表
#includeusing namespace std;struct ListNode{ int value; ListNode *next;};ListNode* AddToTail(ListNode *pHead,int value){ ListNode *pNew = new ListNode; pNew->value = value; pNew->next =原创 2014-09-10 16:30:36 · 274 阅读 · 0 评论 -
Microsoft100——006.判断树B是不是树A的子结构
#include using namespace std;struct BinaryTree{ int value; BinaryTree *left; BinaryTree *right;};//先序创建BinaryTree *Creat(){ int value; cin>>value; BinaryTree *root; if (value==0) {原创 2014-09-10 20:20:07 · 357 阅读 · 0 评论 -
Microsoft100——12.求和
题目:求1+2+........+n要求不能使用乘除法、for、while、if、else、switch、case、等关键字以及其条件判断语句(A?B:C)这题确实好难,吃饭的时候想了半天没有想出来,还是在网上找的答案。也写出来给大家共享一下了。这题的关键是如何控制循环条件。在下面的第一种方法,是使用静态变量,通过new一个数组的大小来控制循环的停止。而第二种方法是真正的高原创 2014-01-08 23:17:45 · 511 阅读 · 0 评论 -
Microsoft100——10.翻转单词
翻转句子中单词的顺序题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入”I am a student.“,则输"studeng. a am I"。这题也比较简单,首先写一个利用字符串头尾指针翻转字符串的函数对这个字符串翻转一次,然后通过空格得到单词的头尾指针,再翻转一次即可。#inc原创 2014-01-08 22:50:37 · 352 阅读 · 0 评论 -
Microsoft100——05.查找最小的k个元素
查找最小的k个元素(数组)题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4.这个题目最容易想到的是排序算法。在这里我使用的是选择排序,因为不需要将所有元素进行排序,只需要找到k个最小值,所以使用选择排序,循环k次即可。代码:#include using namespace std;void Sel原创 2014-01-08 10:24:04 · 408 阅读 · 0 评论 -
001递归——整数划分
整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。所谓整数划分,是指把一个正整数n写成如下形式:n=m1+m2+...+mi; (其中mi为正整数,并且1 如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)例如:正整数6有11总不同的划分6;5+1;4+2,4+1+1;3+3,3+2+1,3+原创 2013-07-01 21:43:38 · 425 阅读 · 0 评论 -
003分治——合并排序
合并排序作为一种很经典的排序算法,其主要核心思想在于先递归分治,再将小的结果合并起来成为最终结果,其T(n)=O(nlogn);已经达到了排序算法的下界之前竟然忘记了有template这个功能,现在试着用用,果然程序更灵活了.代码如下://MergeSort//by xcz on 2013.7.3#include using namespace std;templat原创 2013-07-03 22:53:01 · 449 阅读 · 0 评论 -
004分治——快速排序
算法的基本思想:设置数组a[left,right]中的第一个元素a[left]为主元.设置m = left, n = right + 1,由n处从后往前找到第一个比主元小的元素;由m处从前往后找到第一个比主元大的元素;交换这两者.交换完成后,判断m 算法缺陷:因为上面是固定的选择第一个元素为主元,如果当这个元素为此列数最大或者最小的数时,算法时间复杂度就为(n2),可以通过加入随机选择数组原创 2013-09-03 17:11:54 · 382 阅读 · 0 评论 -
005动态规划——矩阵连乘
矩阵连乘问题的概念和基本思路我这里就不写了,网上很多,随便百度一下就可以了. 偷个懒了,呵呵~~~//MatrixChain//by xcz on 2013.9.3#include using namespace std;//递归求最优解//i,j是计算连乘矩阵的下标,s记录断点的位置int MatrixChain(int i,int j,int **s,in原创 2013-09-03 22:29:31 · 363 阅读 · 0 评论 -
006回溯法——n皇后问题
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。 代码如下://nQueen//by xcz on 2013.9.10#include #include "math.h"using namespace std原创 2013-09-10 22:34:56 · 469 阅读 · 0 评论 -
007趣味——微软面试海盗分宝石+飞机加油
海盗分宝石这是一个很经典的问题,具体已经不记得是哪一年的面试题了,但是当时微软确实给出了20分钟给出答案即可获得至少年薪8万美金职位的承诺海盗分宝石——五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城。他们决定这么分:抽签决定自己的号码(1 2 3 4 5)首先,由1号提出分配方案,然后剩下的4人进行表决,当且仅当超过半数的人同意时,按照他的分配方案进行分配,否则将被扔入大海喂鲨鱼。原创 2013-09-22 20:45:10 · 1160 阅读 · 0 评论 -
Microsoft100——02.min函数的栈
这题是之前无聊的时候写的,先贴出来吧。在此之前还是得感谢CSDN上无私的大神们,关于微软100题,最全面的资料莫过于JULY大神的博客,有兴趣的读者可以见http://blog.csdn.net/v_july_v/article/details/6870251设计包含min函数的栈定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及p原创 2014-01-06 09:42:44 · 544 阅读 · 0 评论 -
Microsoft100——03.子数组最大和
求子数组的最大和(数组)题目:输入一个整型数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值 。要求时间复杂度为O(n)例如:输入的数组为1,-2,3,10,-4,7,2,-5,和最大的子数组为3,10,-4,7,2.因此输出为该子数组的和18.当我做这道题的时候,想到了看过的电影21点,里面每个牌对原创 2014-01-06 12:33:07 · 413 阅读 · 0 评论 -
Microsoft100——007.快速排序
#include using namespace std;//快速排序void QuickSort(int array[],int head,int end){ if (head<end) { int i=head,j=end; int point = array[head]; while (i<j) { while(i=point) --j;原创 2014-09-11 16:25:00 · 341 阅读 · 0 评论