数据结构与算法
林英想
这个作者很懒,什么都没留下…
展开
-
递归法求数组中的最大数
递归法求数组中的最大数,在内存紧缺的嵌入式设备中,能不用就不要用。#define ARRAY_LEN(x) sizeof(x)/sizeof(x[0])#include int max(int x[], int n){ if (n == 1) { return x[0]; } else { if (x[n原创 2017-07-18 08:51:48 · 569 阅读 · 0 评论 -
删除单向链表的指定节点
实现一个算法,删除单向链表中间的某个节点,假定你只能访问该节点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true。难点:这题的关键是没有给你头节点,如何利用给定的待删除节点,删除该节点?思路:将删除节点的下一个节点复制到带删除的节点,然后删除一下节点。struct ListNode { int va原创 2017-07-18 08:58:05 · 453 阅读 · 0 评论 -
互为旋转词
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对于两个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。比如:"cdab",4,"abcd",4原创 2017-07-18 11:07:39 · 411 阅读 · 0 评论 -
字符串部分逆序
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。给定一个原字符串A和他的长度,请返回逆序后的字符串。如"I love you",13返回:"you love me"思路:先将整个字符串逆序,然后再局部逆序个别单词。class Rev原创 2017-07-18 10:36:47 · 480 阅读 · 0 评论 -
互为变形词
对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。给定两个字符串A和B及他们的长度,请返回一个bool值,代表他们是否互为变形词。测试样例:"abc",3,"bca",3返回:true思路:创建一个ascii码数组表,出现置为1,再讲两个字符串的ascii码数组表进行比较即可原创 2017-07-18 11:29:30 · 436 阅读 · 0 评论 -
去除重复字符
设计一个算法,在不使用额外存储空间的情况下,去掉字符串中重复的字符。(注:允许使用一个或者两个附件变量,但不能傻不拉几的把所有的字符复制一遍)方法有很多,废话不多说,直接帖上代码。#include #include /***技巧,但是要分配额外的ascii码表数组*/void rmdup1(char* str){ if(str==NULL) return; int le原创 2017-07-18 13:56:29 · 516 阅读 · 0 评论 -
10大程序员实用基础算法
算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)转载 2017-07-10 11:03:25 · 309 阅读 · 0 评论