09 2013 档案
摘要:找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数#includeusing namespace std;int findMore(int a[],int n){int A=a[0],B=0;for(int i=0;i<n;i++){if(A==a[i])B++;elseB--;if(B==0){A=a[i];B=1;}}return A;}电脑上写程序还是比纸上写程序舒服啊啊啊!!!不得不说在任何情况下以任何形式编程序还是要注意编程风格和基本的编程规范的!!!不得不说认真和细心很重要。也就是说态度决定高度!!!!
阅读全文
摘要:堆排序看了很久,并未实现。这次把编程珠玑和课本上的方法拿来一起温习//堆排序#includeusing namespace std;void sift(int a[],int low,int high){int i=low,j=2*i;int tmp=a[i];while(ja[j+1]) j++; //j指示孩子结点中较小的节点 if(tmp>a[j]) { a[i]=a[j]; //a[j]调整到双亲结点 i=j; //修改i和j的值,继续向下筛选 j=2*i; } else break;}a[i]=tmp;}void SiftSort(int a[],int n){int tmp;
阅读全文
摘要:不得不拿来说说。。。。霸笔也不容易呀!!!题1:void Test(void){char *str = (char *) malloc(100);strcpy(str, "hello");free(str);if(str != NULL){strcpy(str, "world");printf(str);}}int main(){Test();return 0;}问题一:用malloc分配内存后并未检测内存分配是否成功问题二:free(str)后未置str=NULL。此时str为野指针,输出结果为乱码题2void GetMemory(char *p){p
阅读全文
摘要:问题一:给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树。#include "stdafx.h"#include#include#includeusing namespace std;typedef struct node{char data;struct node *lchild;struct node *rchild;}BTNode;#define MAXSIZE 100void ShortestTree(BTNode *&b,char a[],int low,int high){//用一组数据构造最小高度的树,当树的左孩子和右孩子有相同高度时,树最
阅读全文
摘要://问题描述:实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)#include "stdafx.h"#include"FindUnique.h"#include#includeusing namespace std;/*//算法思想:ASCII字符集中字符数256个,可用256位表示某个字符是否出现过,所有位始化为0,若第i位为1,表示出现过此字符,否则,将其设为访问过bool isUnique(const char *s){ bool b[256]; memset(b,0,sizeof(b
阅读全文
摘要:////问题描述:在一组数中,只有两个不同的数,其它数字成对出现,任给一组数字,找出仅出现一次的两个数//算法思想:将数组中所有元素异或,异或结果为仅出现一次的两个数的异或结果。再从最低位找出第一个为1的位(假设为i位),//说明这两个数在此位上不同,可以此位为依据将数组中的//元素分为两组,第i位为1的一组,第i位为0的一组,再分别将两组所有元素异或,则可找出在子数组中只出现一次的数,也就是整个数组中仅出现一次的不同的两个数。#include "stdafx.h"#includeusing namespace std;void find2(int a[],int n){
阅读全文
浙公网安备 33010602011771号