天天看点

2013年搜狐SOHU实习生技术笔试题SOHU2013技术中心新生训练营技术笔试题SOHU 2013校园招聘笔试试卷

SOHU2013技术中心新生训练营技术笔试题

一、不定项选择题

1、HTTP状态码500代表什么含义(C)

A、请求资源未在服务器上发现

B、请求成功,相应的响应头或数据包丢失

C、服务器错误

D、返回时间500ms

分析:HTTP状态码:

1xx消息:代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。

2xx成功:代表请求已成功被服务器接收、理解、并接受。

3xx重定向:代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。

4xx请求错误:码代表客户端看起来可能发生了错误,妨碍了服务器的处理。

5xx服务器错误

2、下面那些不是链表的特点(B)

A、插入不需要移动

B、快速随即访问一个节点

C、所需存储空间与线性表长度成正比

D、不用预估计存储大小

3、五个元素按照ABCDE的次序入栈,,其出栈可能的顺序不正确的是(D)

A、EDCBA

B、DECBA

C、ABCDE

D、DCEAB

4、下面哪些不属于面向对象的特征的是(D)

A、继承

B、抽象

C、封装

D、反射

5、mysql数据表有三个字段A、B、C,建立联合索引ABC,查询一下字段不需要联合索引的是(D)

A、AB

B、AC

C、BC

D、C

6、TCP/UDP下面正确的是(B)

A、both TCP and UDP provide reliability service

B、TCP provide connection-oriented services

C、TCP cannot provide flow control

D、Both TCP and UDP provide retransmission services

注解:UDP是没有保障的。

7、给出下面java代码,

Class Test{

private int a;

public static void fun(){…}

};

如何使成员变量a被函数fun()直接访问?(B)

A、将private int a改成protected int a

B、 将private int a改成static int a

C、 将private int a改成public  int a

D、将private int a改成int a

8、产生死锁的四个必要条件是:互斥、(A)、循环等待和不可强占。

A、请求与保持

B、保持阻塞

C、请求与阻塞

D、独立执行

9、下列属于稳定的排序算法的是(A)

A、插入排序

B、快速排序

C、堆排序

D、选择排序

10、下面哪些项是一个典型的优势来实现分布式对象系统(ABCDE)

A、增加可扩展性

B、利用多个CPU

C、允许可伸缩性

D、数据/服务可靠性

E、实现了ACID特性

11、

#include <stdio.h>

int main(){

int s;

scanf(“%d”,&s);

while(s >0)

{

    Switch(s)

    {

case 1:printf(“%d”,s+5);

case 2:printf(“%d”,s+4);break;           

case 3:printf(“%d”,s+3);

default: printf(“%d”,s+2);break;

}

scanf(“%d”,&s);

}

}

这段代码输入1 2 3 4 5 0回车,输出结果是(A)

A、6566567

B、65665672

C、66667

D、666672

12、unsigned short hash(unsigned short key){return (key>>4)%256;}

请问hash(16),hash(256)的值分别是(A)

A、1,16

B、8,32

C、4,16

D、1,32

13、设fop已定义,执行语句fop=fopen(“file”,”w”);后,以下针对文本file进行操作正确的是(D)

A、写操作结束后可以从头开始读

B、可以在原有内容后追加写

C、可以随意读和写

D、只能写不能读

14、linux的cron后台常驻程序(daemon)用于(D)

A、负责文件在网络找的共享

B、管理打印子系统

C、跟踪管理系统信息和错误

D、管理系统日常任务的调度

分析:crontab 命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。

15、以下数据结构中不属于线性数据结构的是(C)

A、队列

B、线性表

C、二叉树

D、栈

分析:线性结构中的数据元素之间是一种线性关系,数据元素一个接一个地排列。常用的线性结构有:线性表,栈,队列,循环队列,数组。线性表中包括顺序表、链表等。

16、SQL语言是什么语言(C)

A、层次数据库

B、网络数据库

C、关系数据库

D、非数据库

17、设一棵二叉树中有3个叶子节点,有8个度为1的节点,则树中总得节点数为(B)

A、12

B、13

C、14

D、15

分析:度为2的节点=叶子节点数-1.

18、下面有关测试原则的说法的说法不正确的是(BCD)

A、测试用例应由测试的输入数据和语句的输出结果两部分组成

B、测试用例可自选合理的输入数据

C、程序最好由编写该程序的程序员自己来测试

D、使用测试用例进行测试是为了检查程序员是否做错了他该做的事情

19、属于网络层协议的是(B)

A、TCP

B、IP

C、UDP

D、FTP

分析:各层协议

网络层:IP

传输层:TCP、UDP

应用层:TELNET、FTP、SMTP、WWW等

20、下列编码中汉字一般占用3个字节的是(B)

A、GBK

B、UTF-8

C、ASCII

D、Unicode

分析:GB2312、GBK到GB18030都属于双字节字符集;Unicode:2字节

二、填空题

1、在linux下,填写完成如下操作的命令。

查看java进程数(ps | grep java)

查看磁盘空间(df)

2、栈操作的原则(先入后出)

队列操作的原因是(先入先出)

3、线程的几种基本状态(就绪、阻塞和运行)

4、对一批编号为1-100的全部或开关朝上(开)的灯进行一下操作,凡是1的倍数的朝反方向拨一次,全部是2的倍数的又拨一次,3的倍数的反方向又拨一次。。。最后开挂不能熄灭的是(平方数)。

注解:拨开关的次数必须满足一个条件:约数的个数是奇数个。

5、若某二叉树的前序遍历访问顺序是abdgcefi,中序顺序是dgbaecif。那么后续遍历访问顺序是(gdbeifca)

三、简答题

1、介绍一下设计模式的工厂模式和单例模式,并实现一个单例模式。

这个google搜索一大堆。

2、快速排序法事应用最广泛的排序算法之一,最佳情况下时间复杂度是O(nlogn)。但是最坏情况下可能达到O(n^2)。说明快速排序达到最坏情况的原因。并提出改善方案并实现之。

答:出现坏情况的原因是每次选定枢轴进行划分之后所得的两部分不均衡,导致直到有序所需的划分次数很大。

改善方案:

改变枢轴的选取方法。

每次随机选择一个枢轴进行划分。

代码(C++):

[cpp]  view plain copy print ?

  1. #include <iostream>  
  2. #include <ctime>//time  
  3. #include <cstdlib>//rand  
  4. #include <algorithm>//swap  
  5. using namespace std;  
  6. //划分-普通版本  
  7. template <class KeyType>  
  8. int partition(KeyType *a,int low,int high)  
  9. {  
  10.        //int pivotKey = *(a + high);  
  11.        //int i = low;  
  12.        //int j = high - 1;  
  13.        //while(i < j)  
  14.        //{  
  15.        //     while(i < j && pivotKey > *(a + i))  
  16.        //            ++i;  
  17.        //     while(i < j && pivotKey < *(a + j))  
  18.        //            --j;  
  19.        //     if(i < j)  
  20.        //            swap(*(a + i),*(a + j));  
  21.        //}  
  22.        将枢轴放到正确的位置  
  23.        //if(*(a + i) > *(a + high))  
  24.        //     swap(*(a + i),*(a + high));  
  25.        //版本2  
  26.        int pivotKey = *(a + low);  
  27.        while(low < high)  
  28.        {  
  29.               while(low < high && *(a + high) > pivotKey)  
  30.                      --high;  
  31.               *(a + low) = *(a + high);  
  32.               while(low < high && *(a + low) < pivotKey)  
  33.                      ++low;  
  34.               *(a + high) = *(a + low);  
  35.        }  
  36.        *(a + low) = pivotKey;  
  37.        //return i;  
  38.        return low;  
  39. }  
  40. //划分-随机化版本  
  41. template <class KeyType>  
  42. int partitionRandomized(KeyType *a,int low,int high)  
  43. {  
  44.        //随机选取一个数作为枢轴  
  45.        //随机生成[low,high]中的一个数,作为枢轴的索引  
  46.        srand(time(NULL));  
  47.        int pivotKeyIndex = rand() % (high - low + 1) + low;  
  48.        //交换数组中最后一个元素与枢轴  
  49.        swap(*(a + high),*(a + pivotKeyIndex));  
  50.        return partition(a,low,high);  
  51. }  
  52. //快排-普通版本  
  53. template <class KeyType>  
  54. void QuickSort(KeyType *a,int low,int high)  
  55. {  
  56.        if (low < high)  
  57.        {  
  58.               int mid = partition(a,low,high);  
  59.               QuickSort(a,low,mid - 1);  
  60.               QuickSort(a,mid + 1,high);  
  61.        }  
  62. }  
  63. //快排-随机化版本  
  64. template <class KeyType>  
  65. void QuickSortRandomize(KeyType *a,int low,int high)  
  66. {  
  67.        if (low < high)  
  68.        {  
  69.               int mid = partitionRandomized(a,low,high);  
  70.               QuickSort(a,low,mid - 1);  
  71.               QuickSort(a,mid + 1,high);  
  72.        }  
  73. }  
  74. int main()  
  75. {  
  76.        const int num = 7;  
  77.        int a[num] = {4,2,7,9,3,0,6};  
  78.        QuickSortRandomize(a,0,num - 1);  
  79.        for(int i = 0;i < num;++i)  
  80.               cout << *(a + i) << " ";  
  81.        cout << endl;  
  82. }  

3、说说session和cokies的区别。

分析:

什么是cookie?

cookie分为二种

1,以文件方式存在硬盘空间上的长期性的cookie

2,停留在浏览器所占内存中的临时性的cookie

浏览网站时,你会经常发现网站登录的地方,会有提示,问你是不是要记住自己的登录状态,像这种情况,登录时填写的一些信息会被以文件的方式存放在客户端的硬盘上。

当用户登录后,session会在cookie端产生一个session_id,这个session_id是存于浏览器所占用的内存当中。当你关闭浏览器后,session_id也要消失了。

cookie采用的是在客户端保持状态的方案,它是客户端的会话状态的一种储存机制。它是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头信息向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,或者本地内存中数据,它会自动将同一服务器的任何请求缚上这些cookies,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制借助于cookie机制来达到保存标识的目的,这样就可以解决HTTP协议无状态的缺陷。

什么是session?

session是一种服务器端的信息管理机制,它把这些文件信息以文件的形势存放在服务器的硬盘空间上,这种情况是默认的,可以用memcache把这种数据放到内存里面。请参考web集群时利用memcache来同步session

当客户端向服务器发出请求时,要求服务器端产生一个session时,服务器端会先检查一下,客户端的cookie里面有没有session_id,是否已经过期。如果有这样的session_id的话,服务器端会根据cookie里的session_id把服务器的session检索出来。如果没有这样的session_id的话,服务器端会重新建立一个。PHPSESSID是一串加了密的字符串,它的生成按照一定的规则来执行。同一客户端启动二次session_start的话,session_id是不一样的。

session产生的session_id放在cookie里面,如果用户把cookie禁止掉,是不是session也不能用了呢?禁止掉cookie后,session当然可以用,不过通过其他的方式来获得这个sessionid,比如,可以根在url的后面,或者以表单的形势提交到服务器端。从而使服务器端了解客户端的状态。

session和cookie谁更安全?

就个人而言,我觉得session更安全一点,我以下几点看法。

1,如果session和cookie一样安全的话,二者就没有并要同时存在了,只要cookie就好了,让客户端来分提服务器的负担,并且对于用户来说又是透明的。何乐而不为呢。

2,session的sessionID是放在cookie里,要想功破session的话,第一要功破cookie。功破cookie后,你要得到 sessionID,sessionID是要有人登录,或者启动session_start才会有,你不知道什么时候会有人登录。第二,sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,想在短时间内功破加了密的 sessionID很难。session是针对某一次通信而言,会话结束session也就随着消失了,而真正的cookie存在于客户端硬盘上的一个文本文件,谁安全很显然了。

3,如果session这么容易被功破,这么不安全的话,我想现有的绝大部分网站都不安全了。

SOHU 2013校园招聘笔试试卷

2013年搜狐SOHU实习生技术笔试题SOHU2013技术中心新生训练营技术笔试题SOHU 2013校园招聘笔试试卷

一、不定项选择题

1.C/C++语言:以下打印结果为()。

[cpp]  view plain copy

  1. #include <iostream>  
  2. using namespace std;  
  3. void swap_int(int a, int b)  
  4. {  
  5.     int temp = a;  
  6.     a = b;  
  7.     b = temp;  
  8. }  
  9. void swap_str(char *a, char *b)  
  10. {  
  11.     char *temp = a;  
  12.     a = b;  
  13.     b = temp;  
  14. }  
  15. int main()  
  16. {  
  17.     int a = 10;  
  18.     int b = 5;  
  19.     char *str_a = "hello world";  
  20.     char *str_b = "world hello";  
  21.     swap_int(a, b);  
  22.     swap_str(str_a, str_b);  
  23.     printf("%d, %d, %s, %s", a, b, str_a, str_b);  
  24.     return 0;  
  25. }  

A. 10, 5, hello world, world hello

B. 10, 5, world hello, hello world

C. 5, 10, hello world, world hello

D. 5, 10, world hello, hello world

答:A。都是按值传递,不改变原值

2. C/C++语言:请问打印的两个字符分别是()。

[cpp]  view plain copy

  1. #include <iostream>  
  2. using namespace std;  
  3. typedef struct object object;  
  4. struct object  
  5. {  
  6.     char data[3];  
  7. };  
  8. object obj_array[3] = {{'a', 'b', 'c'},  
  9.                         {'d', 'e', 'f'},  
  10.                         {'g', 'h', 'i'},  
  11.                         };  
  12. int main()  
  13. {  
  14.     object *cur = obj_array;  
  15.     printf("%c, %c", *(char*)((char*)(cur)+2), *(char*)(cur+2));  
  16.     return 0;  
  17. }  

A.c, g

B. b, d

C. g, g

D. g, c

答:A

cur中存储的是'a‘的地址,当cur是object指针时,cur+1后cur存储是数组下一个元素的首地址,即'd'的地址。当cur是char指针时,cur+1是'a'的下一个字符的地址,即'b'的地址

3. C/C++语言:请问在64位平台机器下,以下程序的输出结果()

[cpp]  view plain copy

  1. char *string_a = (char*)malloc(100*sizeof(char));  
  2. char string_b[100];  
  3. printf("%d, %d",sizeof(string_a), sizeof(string_b));  

A. 8, 100

B. 100, 8

C. 100, 100

D. 8, 8

答:A

string_a是一个指针,不管它指向的空间有多大,它本身的空间 是固定的。在64位平台机器下,一个指针的大小是8。

2013年搜狐SOHU实习生技术笔试题SOHU2013技术中心新生训练营技术笔试题SOHU 2013校园招聘笔试试卷

答:B

要是得到的序列为递增,应先访问左子树,再访问根结点,最后访问右子树,根据定义知为中序遍历

5. 往一个栈顺序push下列元素:ABCDE,其pop可能的顺序,下列不正确的是()

A. BACDE

B. ACDBE

C. AEBCD

D. AEDCB

答:C。

6. 1100|1010, 1001^1001, 1001&1100分别为()

A. 1110, 0000, 1000

B. 1000, 1001, 1000

C. 1110, 1001, 0101

D. 1000, 1001, 1000

答:A

1 | 1 = 1, 1 | 0 = 1, 0 | 0 = 0

1 ^ 1 = 0, 1 ^ 0 = 1, 0 ^ 0 = 0

1 & 1 = 1, 1 & 0 = 0, 0 & 0 = 0

7.二叉树是一种树形结构,每个节点至多有两颗子树,下列一定是二叉树的是()

A. 红黑树

B. B树

C. AVL树

D. B+树

答:AC

8.int A[2][3] = {1, 2, 3, 4, 5, 6}, A[1][0]和*(*(A+1)+1)的值分别是()。

A. 4, 5

B. 4, 3

C.3, 5

D.3, 4

答:A

数组是A[2][3] = {{1, 2, 3}, {4, 5, 6}},数组下标从0开始计数。前者是第1行第0列,后者是第1行第1列

9.序列16, 14, 10, 8, 7, 9, 3, 2, 4, 1的说法下面哪一个正确()

A. 是大顶堆

B. 是小顶堆

C. 不是堆

D. 是二叉排序树

答:A

10. 输入若已经是排好序的,下列排序算法最快的是()

A. 插入排序

B. Shell排序

C. 合并排序

D. 快速排序

答:A

插入排序一遍扫描即可

Shell排序虽不需要交换数据,但也要进行几次插入排序

合并排序虽不需要交换数据,但也要进行lgn次合并

快速排序在数列有序的情况下效率是最低的

11.一种既有利于短作业又兼顾长期作业的调度方法是()。

A. 先来先服务

B. 均衡调度

C. 最短作业优先

D. 最高响应比优先

答:D

12.同一进程下的线程可以共享()

A. stack

B. data section

C. register set

D. thread ID

答:B

A是栈区。同一个进程的线程共享堆区,但是各自维护自己的栈区

B是数据区。

C是寄存器

D线程ID。同一进程的线程共享一进程ID,各自拥有自己的线程ID

参考http://blog.csdn.net/yang201240/article/details/7243991

13.系统中的“颠簸”是由()引起的。

A. 内存容量不足

B. 缺页率高

C.交换信息量大

D. 缺页率反馈模型不正确

答:D

“颠簸”是《计算机操作系统》中的“抖动”,A和B会造成抖动,但不是主要原因。主要原因是由于每个进程的页面数没有很好地计算,导致某些页面反复地进出。

14.8瓶酒一瓶有毒,用人测试。每次测试结果8小时后才会得到,而你只有8小时的时间,最少需要()人测试

A. 2

B. 3

D. 4

D. 6

答:B。类似不带差错控制的海明码。淘宝出过这种题。

2013年搜狐SOHU实习生技术笔试题SOHU2013技术中心新生训练营技术笔试题SOHU 2013校园招聘笔试试卷

答:ABD

TCP的关闭连接是四次握手

UDP提供的是面向无连接的不可靠服务

C参考http://blog.csdn.net/zhangjay/article/details/6403076

客户端不可以调用bind()

16. 进程间的通讯有哪几种形式()

A. Socket

B. Pipe

C. Shared memory

D. Signal

答:ABCD

参考4-16笔试

2013年搜狐SOHU实习生技术笔试题SOHU2013技术中心新生训练营技术笔试题SOHU 2013校园招聘笔试试卷

答:AC

2013年搜狐SOHU实习生技术笔试题SOHU2013技术中心新生训练营技术笔试题SOHU 2013校园招聘笔试试卷

答:ABCDE

19.10个不同的球,放入3个不同的桶内,共有()种方法

A. 1000

B. 720

C. 59049

D. 360

答:C

3^10

20.87的100次幂除以7的余数是多少()

A. 1

B. 2

C. 3

D. 4

答:D

由公式(a*b)%c == (a%c)*(b%c)可知(87^100)%7=(87%7)^100=(3^100)%7

对于任意n(n>=0),(3^n)%7只能6种可能,依次为1,3,2,6,4,5……

二、简答题

1. (1)请描述进程和线程的区别? 见 4-16笔试第七题和 Linux2.6进程 (2)多线程程序有什么优点,缺点? (3)多进程程序有什么优点,缺点?与多线程相比,有何区别。   2.写代码:反转一个单链表,分别以迭代和递归形式实现 [cpp]  view plain copy

  1. typedef struct node LinkNode;  
  2. struct node  
  3. {  
  4.     int data;  
  5.     LinkNode *Next;  
  6. };  
  7. //@ret 返回新链表头节点  
  8. LinkNode *reverse_link(LinkNode *head);  
  9. LinkNode *reverse_link_recursive(LinkNode *head);  

答:

[cpp]  view plain copy

  1. #include <iostream>  
  2. using namespace std;  
  3. typedef struct node LinkNode;  
  4. struct node  
  5. {  
  6.     int data;  
  7.     LinkNode *Next;  
  8. };  
  9. //@ret 返回新链表头节点  
  10. LinkNode *reverse_link(LinkNode *head);  
  11. LinkNode *reverse_link_recursive(LinkNode *head);  
  12. //非递归方法  
  13. LinkNode *reverse_link(LinkNode *head)  
  14. {  
  15.     LinkNode *p = head;  
  16.     while(p->Next != NULL)  
  17.         p = p->Next;  
  18.     LinkNode *ret = p;  
  19.     LinkNode *q = head;  
  20.     while(1)  
  21.     {  
  22.         while(q->Next != p)  
  23.             q = q->Next;  
  24.         p->Next = q;  
  25.         p = q;  
  26.         if(q == head)  
  27.         {  
  28.             q->Next = NULL;  
  29.             break;  
  30.         }  
  31.         q = head;  
  32.     }  
  33.     return ret;  
  34. }  
  35. //递归方法  
  36. LinkNode *reverse_link_recursive(LinkNode *head)  
  37. {  
  38.     if(head->Next == NULL)  
  39.         return head;  
  40.     LinkNode *ret = reverse_link_recursive(head->Next);  
  41.     head->Next->Next = head;  
  42.     head->Next = NULL;  
  43.     return ret;  
  44. }  
  45. //输出结果,用于测试  
  46. void Print(LinkNode *head)  
  47. {  
  48.     LinkNode *p = head;  
  49.     while(p)  
  50.     {  
  51.         cout<<p->data<<' ';  
  52.         p = p->Next;  
  53.     }  
  54.     cout<<endl;  
  55. }  
  56. //不是题目要求,用于测试  
  57. int main()  
  58. {  
  59.     int i;  
  60.     LinkNode *p = NULL;  
  61.     for(i = 0; i < 10; i++)  
  62.     {  
  63.         LinkNode *q = new LinkNode;  
  64.         q->data = i;  
  65.         q->Next = p;  
  66.         p = q;  
  67.     }  
  68.     Print(p);  
  69.     p = reverse_link(p);  
  70.     Print(p);  
  71.     p = reverse_link_recursive(p);  
  72.     Print(p);  
  73.     return 0;  
  74. }  
2013年搜狐SOHU实习生技术笔试题SOHU2013技术中心新生训练营技术笔试题SOHU 2013校园招聘笔试试卷

答:最大和子序列,HDOJ1003

http://acm.hdu.edu.cn/showproblem.php?pid=1003

[cpp]  view plain copy

  1. #include <iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     int n,m,i,j,num,start,end,start1;  
  6.     long max,temp;  
  7.     while(cin>>n)  
  8.     {  
  9.         for(j=1;j<=n;j++)  
  10.         {  
  11.             cin>>m;  
  12.             cin>>num;  
  13.             max=temp=num;  
  14.             start=start1=end=1;  
  15.             for(i=2;i<=m;i++)  
  16.             {  
  17.                 cin>>num;  
  18.                 if(temp>=0) {temp=num+temp;}  
  19.                 else  
  20.                 {  
  21.                     temp=num;  
  22.                     start1=i;  
  23.                 }  
  24.                 if(temp>max)  
  25.                 {  
  26.                     max=temp;  
  27.                     start=start1;  
  28.                     end=i;  
  29.                 }  
  30.             }  
  31.             cout<<"Case "<<j<<':'<<endl;  
  32.             cout<<max<<' '<<start<<' '<<end<<endl;  
  33.             if(j!=n) cout<<endl;  
  34.         }  
  35.     }  
  36.     return 0;  
  37. }  

三、设计题

2013年搜狐SOHU实习生技术笔试题SOHU2013技术中心新生训练营技术笔试题SOHU 2013校园招聘笔试试卷

其他:

1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。析:有2个弱判断准则,不过不知道3个加起来是不是和题目等价

2.一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值

   比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; 

   {3,6}{2,4,3} m=2

   {3,3}{2,4}{6} m=3 所以m的最大值为3包问题, 当然有些条件可以预先判断,比如(所有元素的和%m)!=0, 那么就不需要处理了.

3.求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}直接遍历, O(n

4.一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。

分析:二分法查找分界点, 再二分法查找O(ln(n))

原文地址:

http://blog.csdn.net/doc_sgl/article/details/8907655