C
文章平均质量分 50
hello2sys_cs
这个作者很懒,什么都没留下…
展开
-
删除单链表中的重复结点
方法一:递归link delSame(link head){/* 不变式:list{k..n-1}没有重复的元素,加入list{k-1}后,为了保持不变式 要从list{k-1..n-1}两两比较,如果有相同元素必定在开头两个*/ link pointer,temp = head; if(head->next == NULL) return head; head->next =转载 2013-03-11 20:14:25 · 939 阅读 · 0 评论 -
找出数组中唯一的重复元素
数组a[N],1至N-1这N-1个数存放在a[N]中,其中某个数重复一次。找出这个数void xor_findDup1(int *a,int N){//方法一:求和 int tmp1 = 0; int tmp2 = 0; for(int i = 0;i < N - 1; ++i) {//tmp1为1...N-1的和,tmp2为数组所有元素的和 tmp1 += (i + 1);原创 2013-03-15 15:20:20 · 592 阅读 · 0 评论 -
判断一个较大的单链表是否有环及求环的入口点
/*判断单链表中是否有环*/struct ListType{ int data; struct ListType *next;};typedef struct ListType *list;int IsLoop(list s){//双指针法 list fast = s; list slow = s; if(fast == NULL) return -1;转载 2013-03-14 15:13:58 · 561 阅读 · 0 评论 -
编程之美-数组循环移位
#includevoid RightShift1(int *arr,int N,int K){//循环右移 K %= N; while(K--) { int t = arr[N - 1]; for(int i = N - 1; i > 0;--i) { arr[i] = arr[i - 1]; } arr[0] = t; }}void Reverse转载 2013-03-14 12:39:01 · 511 阅读 · 0 评论 -
编程之美-寻找发帖水王
Type Find(Type *ID,int N){//寻找发帖"水王",假设只有一个 Type candidate; int nTimes,i; for( i = nTimes = 0; i < N; i++) { if(nTimes == 0) { candidate = ID[i]; nTimes = 1; } else { if(candi原创 2013-03-13 13:10:18 · 585 阅读 · 0 评论 -
编程之美—不要被阶乘吓倒
int FactorialZeroNum1(int N){//N!末尾有多少个0,求1..N各个数的5的因子有多少个 int ret = 0; for(int i = 1 ; i <= N ; ++i) { int j = i; while( j % 5 == 0) { ret++; j /= 5; } } return ret;}int Facto原创 2013-03-13 12:25:19 · 546 阅读 · 0 评论 -
sizeof(&b)与VC++中的bug
int main(){//2013/3/12//sizeof(&b)在VC++6.0中为400,而在Devc++中则是4,&b的类型是int (*)[100],明显是一个指针,应该是4 int b[100]; int *c = &b; //编译错误 cannot convert `int (*)[100]' to `int*' in initialization int (*a)原创 2013-03-12 16:05:40 · 626 阅读 · 0 评论 -
在O(n)时间复杂度内找出数组中的众数
bool FindMostApperse(int *num,int len,int &candidate){ int count = 0; for(int i = 0;i < len;++i) { if(count == 0) //目前得到的数出现次数为0时,更换另外一个数 { candidate = num[i]; co原创 2013-03-12 15:10:32 · 4989 阅读 · 3 评论 -
合并两个有序链表(非交叉)
Node *MergeRecursive(Node *head1,Node *head2){//递归合并两个有序链表 if(head1 == NULL) return head2; if(head2 == NULL) return head1; Node *head = NULL; if(head1->data data) { head = head1; head->原创 2013-03-11 19:48:15 · 524 阅读 · 0 评论 -
找出数组中重复次数最多的数
#include#include#includeusing namespace std;//以空间换时间int GetMaxNum(int *arr,int len,int &num){//找出数组arr中最大的数及其下标 int index = arr[0]; int i; for( i = 0;i <= len;++i) //注意这里是闭区间,理原创 2013-03-12 14:40:57 · 1286 阅读 · 0 评论 -
判断两个单链表(无环)是否交叉
bool IsIntersect(Node *list1,Node *list2,Node *&value){//判断两个单链表(无环)是否交叉 value = NULL; if(NULL == list1 || NULL == list2) return false; Node *temp = list1,*temp2 = list2; int len1 = 0,len2 = 0转载 2013-03-11 20:32:45 · 573 阅读 · 0 评论 -
判断数组中的数值是否连续
#include#includebool IsContinuous1(int *arr,int N){/*整数数列,元素取值为0...65535中任意一个不重复的数,0可以出现多次 1、元素值可以乱序。 2、0可以匹配任何数值。 3、0可以多次出现。 4、全0算连续、只有一个非0也算连续。 */ int min = -1,max = -1; for(int i = 0;i原创 2013-03-16 13:52:51 · 1624 阅读 · 0 评论