常用算法

一、快速排序 void qsort(int x,int y) //待排序的数据存放在a[1]..a[n]数组中   {int h=x,r=y;    int m=a[(x+y)>>1]; //取中间的那个位置的值    while(h {while (a[h]       ...

2012-09-23 20:01:27

阅读数:812

评论数:0

找出数组中出现次数超过一半的数

问题: 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。 解析: 这个题目类似于:微软的寻找发帖水王,思想: 类似于擂台赛,设最多的数为X, 每次删除两个不同的数(不管是否为最多的数X), 则我们能保证剩下的数中X还是超过剩余总数的一半,一直循...

2012-09-22 21:48:15

阅读数:761

评论数:0

找出字典中的兄弟单词

问题: 给定一个单词A,如果通过交换单词中字母的顺序可以得到另外的单词B,那么定义B是A的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词? 解析: 思路1: 1. 关键时怎么定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key...

2012-09-22 20:52:19

阅读数:694

评论数:0

字符过滤(2013华为校园招聘上机考试)

一个字符串,如aAbas__a;要求,过滤为每个字符只出现一次:aAbs_; #include #include #include #include #include void chstr(const char *Input,char *Out) {    int m=strlen...

2012-09-20 09:04:58

阅读数:594

评论数:0

一些程序题(上机考)

1.找出一个数组中满足2^N的元素 #include using namespace std; int find(int a[],int len); void main() { int a[]={1,2,3,5,7,8,16}; int len=sizeof(a)/sizeof(i...

2012-09-20 09:00:02

阅读数:534

评论数:0

ip地址转化为整数 整数转化为IP地址

1.IP地址转换为一个整数 intipstrtoint(const char *ip) { int   result = 0; int   tmp = 0; int   shift = 24; const char *pEnd = ip; const char *pStart = i...

2012-09-20 08:31:49

阅读数:575

评论数:0

统计一串字符串中出现次数最多和次多的单词

//统计一串字符串中出现次数最多和次多的单词 #include #include #include int compare(const char * st1,const char * st2) {   if (strcmp(st1,st2)==0)   return 1; ...

2012-09-20 08:11:50

阅读数:2382

评论数:0

判断完全二叉树以及求二叉树深度的递归与非递归算法实现

/* 判断完全二叉树,依据定义:任何一个节点(除去叶子节点)有且仅有两个“孩子” */ #include<stdlib.h> #define MAX_TREE_DEGREE 10 typedef struct BTnode{//以二叉链表作为存储结构           char dat...

2012-09-20 07:51:12

阅读数:1891

评论数:1

最大连续子数列和问题

问题描述:给定一串整数,找出其中和最大的连续子数列,包括子数列的位置和最大和。 给定整数序列:{0, -3, 6, 8, -20, 21, 8, -9, 10, -1, 3, 6, 5} 其中和最大的连续子数列为:{21, 8, -9, 10, -1, 3, 6, 5} 【PS】 ...

2012-09-17 22:19:08

阅读数:659

评论数:0

贪婪算法与计数排序

1.贪婪法: 初学算法时便知道这是解决问题一种很好很简单的方法,听课后才发现它能解决的问题还真是多。解决这类问题的方法可概括为“步步为营”,即每一步的选择一定是最优的过后不能更改,这一点是与动态规划最大的区别,动态规划也是类似的自底向上的解决方法,但是其做每一次选择的时候可能会对前面的选择作出动...

2012-09-14 21:14:21

阅读数:918

评论数:0

两个单向链表的第一个公共节点

问题: 两个单向链表,可能存在公共节点。如何判断是否存在公共节点,并找出它们的第一个公共结点。 思想: 1. 如果两个链表相交,则从相交点开始,后面的节点都相同,即最后一个节点肯定相同; 2. 从头到尾遍历两个链表,并记录链表长度,当二者的尾节点不同,则二者肯定不相交; 3. 尾节点...

2012-09-09 23:12:58

阅读数:423

评论数:0

有序数组中找出给定数字的出现次数

问题: 在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。 解答: 使用二分查找的方法分别找出给定数字的开始位置minIndex和结束位置maxIndex,最坏情况下时间复杂度为O(logn)。 简单代码如下: /* 二分搜索 2....

2012-09-09 23:03:28

阅读数:942

评论数:0

数据结构及算法学习总结(一)

1.vector 封装数组、list封装链表、map和set封装二叉树 C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般的平衡二叉树(有...

2012-09-09 22:34:36

阅读数:1637

评论数:0

左旋转字符串

题目:   定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。     如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。     要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。 分析:如果不考虑时间和空间复杂度的限...

2012-09-05 23:08:26

阅读数:625

评论数:0

链表的循环链接

问题1:判断链表是否循环? 解析: 设置1个快指针(每次向前走2个节点),一个慢指针(每次向前走1个节点),如果存在环,则快指针肯定能赶上慢指针; 简单代码: bool isLoopList(const ListNode* root) {     if(root == NULL) ...

2012-09-04 22:10:06

阅读数:414

评论数:0

动态规划问题

Dynamic Programming From novice to advanced      【原文见: http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=dynProg】                   ...

2012-09-03 19:49:54

阅读数:565

评论数:0

c++各种类型变量的内存分配

程序在的内存中的分配(常量,局部变量,全局变量,程序代码) 一. 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量...

2012-08-30 21:34:38

阅读数:605

评论数:0

C/C++/C#面试题精选4

问题(16):运行如下的C++代码,输出是什么? class A { public:    virtualvoid Fun(int number = 10)    {        std::cout "A::Fun with number "    } };...

2012-08-20 21:24:25

阅读数:513

评论数:0

C/C++/C#面试题精选(2)

题目(六):运行下列C++代码,输出什么? struct Point3D {       int x;       int y;       int z; }; int _tmain(int argc, _TCHAR* argv[]) {       Point3D* pPo...

2012-08-20 21:23:25

阅读数:438

评论数:0

C/C++/C#面试题精选(3)

题目(11):运行下图中的C#代码,输出是什么? namespace StringValueOrReference {    class Program    {        internal staticvoid ValueOrReference(Type type)       ...

2012-08-20 21:22:16

阅读数:507

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭