数据结构与算法
文章平均质量分 69
lwj103862095
新手交流,能者指教
展开
-
找出数组里面元素出现次数最多的问题
/* 问题: 在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。 设计一个算法,找出出现次数最多的数字。*/ #includevoid search(int a[],int len){ int i,index,max = 0; int temp[1000] = {0}; //定义一原创 2013-03-09 10:49:30 · 5622 阅读 · 1 评论 -
冒泡算法的优化
原文转自:http://blog.csdn.net/lengyuhong/article/details/4659552冒泡算法的主要思想: 冒泡排序和插入排序相类似,都是简单的排序算法 ,时间复杂度O(N^2) 算法思想: 1) 有n个数(存放在数组a[0]-a[n-1]中),第一趟将每相邻两个数比较,小的换到前面,经n-1次两两相原创 2013-09-27 22:18:40 · 986 阅读 · 0 评论 -
查找主串中是否还有子串,如果有则返回匹配的第一个位置
题目:查找主串中是否还有子串,如果有则返回匹配的第一个位置,否则返回-1#include #include int Index(char *origine, char *target){ if (origine ==NULL||target == NULL) //先检查是否为空 { printf("there is a false\n"); return -1;原创 2013-10-11 10:33:37 · 4676 阅读 · 1 评论 -
itoa函数的实现
itoa()函数的功能是将一个整数转换为一个字符串,例如12345,转换之后的字符串为"12345",-123转换之后为"-123",欢迎大家的讨论。#include char *reverse(char *s){ char temp; char *p = s; //p指向s的头部 char *q = s; //q指向s的尾部 while(*q) ++q; q--;原创 2013-09-25 11:04:49 · 34141 阅读 · 5 评论 -
找出数组中第二大的数
题目:写一个函数找出一个整数数组中,第二大的数。#include //初始化最大值为a[0],次大值为a[1],遍历一次,每次比较并更新最大值和次大值,最后就可以得到次大值。int findsecondmaxvalue(int *a,int size){ int max = a[0]; //最大值 int second = a[1]; //次大值 for(int原创 2013-09-24 20:13:48 · 18050 阅读 · 5 评论 -
插入排序算法
下面这段话摘自:http://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置重复步骤3,直到找到已原创 2013-10-10 16:57:19 · 1202 阅读 · 0 评论 -
字符串逆序的算法汇总
很早就准备写一个字符串系列的面试题,本来已经写好了,大概有十几道题,但是写完才发现,文章好长,连我自己都没有耐心读下去了,索性就将其拆分成几个系列,一来分开后篇幅变小,看起来比较方便。二来也更有针对性,便于精雕细作。比如这篇,在原来的文章中只占很小的篇幅,但是独立出来才发现,东西也不少。既然是第一篇,就来个最最简单的字符串逆序吧。字符串逆序可以说是最经常考的题目。这是一道入门级的题目,相信原创 2013-09-24 20:52:27 · 10616 阅读 · 1 评论 -
atoi函数的实现
atoi()函数的功能是将一个字符串转换为一个整型数值,例如“12345”,转换之后的数值为12345,“-0123”转换之后为-123,欢迎大家的讨论。#include int my_atoi(const char *str){ int total = 0; //保存转换后的数值 int isNegative = 0; //记录字符串中是否有负号 int length =原创 2013-09-24 16:10:04 · 1779 阅读 · 0 评论 -
反转链表
微软面试题:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:struct ListNode{int data;ListNode *next;};ListNode* ReverseListListNode* head) { if(NULL==head|| NULL==head->next) return head;原创 2013-09-24 19:17:44 · 988 阅读 · 0 评论 -
2014届华为校园招聘机试题
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/11132567一、题目描述(60分):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。要求实现函数:void原创 2013-10-05 11:07:59 · 1312 阅读 · 0 评论 -
2013届华为校园招聘机试题
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/11150519笔试题目(机试,共两题) 题目一:子串分离 题目描述: 通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。 如果原创 2013-10-05 10:42:02 · 1377 阅读 · 0 评论 -
选择法排序
#include /** 选择法:*/void Select(int A[ ],int n){ int i,j,k,temp; for(i = 0;i { k = i; for(j = (i + 1);j if(A[j]原创 2013-04-12 22:30:13 · 1167 阅读 · 0 评论 -
数组求和问题
题目:给定一个整数序列A1,A2,…An,序列长度为n,其中的证书可能为负数, 求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大,并输出最大的和。算法1:复杂度O(n^2)#include int MaxSeqSum(const int A[],int N){ int s1,s2,i,j; s1 = s2原创 2013-04-12 21:14:50 · 1164 阅读 · 0 评论 -
冒泡法排序
#include /** 冒泡法:* 如果有n个数,要进行n-1次比较,第j次比较中需要进行n-j次两两比较*/void Bubble(int A[ ],int n){ int i,j,temp; for(j = 0;j for(i = 0;i if(A[i] > A[原创 2013-04-12 22:14:24 · 1053 阅读 · 0 评论 -
输入二进制数字串,转换成十进制正整数
#include int main(){ int Dec = 0 ; char ch; printf ("Input binary number:\n"); do { ch = getchar(); //首先获得第一个字符 if(ch !='0' && ch !原创 2013-03-10 19:13:22 · 2640 阅读 · 4 评论 -
判断一个数是否为素数
整数 m是素数的条件: 除1 和 m外,没有其它因数。#include using namespace std;#include int main(){ long m; cout cin >> m ; double sqrtm = sqrt(m) ; //函数sqrt是double类型 for原创 2013-03-10 19:34:00 · 1408 阅读 · 0 评论 -
求子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2 因此输出为该子数组的和18。#include #define max(a,b) (a)>原创 2013-09-27 21:28:39 · 4153 阅读 · 2 评论