自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 数据结构面试题总结10——链表:链表综合

问题1:链表反转问题描述:将原链表反转。Node* reverseList(Node *head){    if (head == NULL)    {        return NULL;    }    Node *oldHead = head;    Node *newHead = NULL;    Node *temp = NULL;    w

2015-06-02 16:05:47 658

原创 数据结构面试题总结9——链表:基础操作

链表部分的操作无其他说明时,都用此篇文章定义的方法。链表无特殊说明都为单链表,节点的定义如下typedef struct node{ int data; node* pNext;}Node;创建一个结点,也可以用来创建链表头Node* createNodeList(){ Node *head = new Node; if(NULL ==

2015-06-02 14:42:42 776

原创 数据结构面试题总结8——数组:数组循环移位

问题描述:将一个含有n个元素的数组向右循环移动k位,要求时间复杂度是O(n),且只能使用两个额外的变量。分析:不能使用额外的变量就把我们限制了,如果使用一个同样长度的数组,我们在O(n)时间复杂度下就变的非常简单了。加上俩那个额外变量的条件后我们再分析:假设原数组为123456,右移两位为561234。我们把数组分成两部分1234和56,分别翻转,原数组变为432165,再次对整个数组翻转

2015-05-31 15:43:26 840

原创 数据结构面试题总结7——数组:最大连续子段和、最大连续子段积

问题描述:给定一个数组(元素可负,输出数组的任何连续子数组中的最大值。此题有很多种解法。第一种:循环嵌套,找出所有组合,记录最大值。时间复杂度O(n^2)。int MaxSum(int *v,int n,int *besti,int *bestj){ int sum=0; int i,j; for (i=1;i<=n;i++) { in

2015-05-30 15:37:22 3187 2

原创 数据结构面试题总结6——数组:求两个数组中满足给定和的两个元素

问题描述:在两个有序数组中,分别找出a,b两个元素满足a+b = c,c已知。分析:我们要用有序这个有利条件,避免循环中套循环。我们用两个索引i,j分别指向数组A,B的首尾,根据比较的结果来移动索引的位置。如果    A[i] + B[j]      A[i] + B[j]  > c , j--    A[i] + B[j]  ==  c , i++,j--

2015-05-30 14:19:00 831

原创 数据结构面试题总结5——数组:找出数组中唯一一个出现一次的元素

问题描述:一个数组其中有一个元素出现了一次(奇次),其他元素都出现两次(偶数次数),找出出现一次(奇次)的元素。分析:碰到这种偶次奇次的问题,首先要想一下位运算中的异或。一个数异或本身为0,一个数异或0不变。a ^ a = 0, a ^ 0 = a。这个题中,我们可以把所有的数一起求异或,那剩下的肯定就是出现一次的元素了。int FindOnly(int *a, int n){ i

2015-05-30 13:23:42 2164 2

原创 数据结构面试题总结4——数组:求两个有序数组中的共同元素

问题描述:输入为两个有序数组,输出为共同元素。分析:最简单的方法就是循环中套循环,时间复杂度为O(n*m),但是我们并没有用到有序这个有利条件。我们可以用两个指针i和j分别指向a和b,比较a[i]和b[j],根据比较结果移动指针:1. a[i] 2. a[i] == b[j],则i和j皆加1,继续比较3. a[i] void FindCom(int *a, int

2015-05-30 11:39:58 1026

原创 数据结构面试题总结3——数组:求数组中两个元素的最小距离

问题描述:一个数组,有重复元素,范围不限,找出所给两个数在数组中的最短距离注意开始的判断,a和b相等的情况下直接返回0,还有最后如果其中两个数有一个没有,返回错误信息int minDistance(int *array, int len, int a, int b){ if (array == null || len == 0||a==b) return 0; int A_po

2015-05-29 18:13:53 844

原创 数据结构面试题总结2——数组:求出现次数超过一半的元素

遇到这个题最简单的想法就是,统计每个元素出现的次数。但是无法知道数组中有多少种元素,并且这样会用到其他的存储空间,再查找结果的时候也需要多遍历一次结果的数组。正确的解决办法是去记录重复元素(不管是否是结果元素)的数量,然后碰见一个不同元素就减一(相当于抵消了),碰见结果元素也是一样的。思考一下,结果元素会超出一半,所以当所有不同元素被抵消完肯定还会剩下结果元素。这种方法只遍历一次数组。

2015-05-28 22:55:32 952

原创 数据结构面试题总结1——数组:求最大、次大值

一般大家一开始想到的办法就是一次循环,记录下最大值和最小值。或者就是用两次冒泡,找到最大值和次大值。这两种方法实践复杂度差不多都是O(2n),如果数组很长,效率还是不够高的。注意:直接排序,再选择最大的两个值,这并不是一个好办法,因为我们只需要前两个数有序,不需要后N-2个数有序。冒泡方法我就不帮大家实现了。编程的细节要注意,数组a只是个示例,如果有负值,max和second_ma

2015-05-28 21:03:48 3388

原创 数据结构面试题总结

还记得第一次学数据结构的艰难,也记得学完以后写代码思路的开阔。所以它很难,但是又很重要,数据结构应该是面试中必考,并且是重点考核的科目。最近复习了一下数据结构,在网上找了一些典型的面试题,因为答案很零散所以想整理一下,顺便帮助一下在复习数据结构的同学们。整理大概分为数组、链表、二叉树、图、查找、排序几个部分,每个部分的内容分为多个文章写,此文章会更新链接。代码使用c/c++, 环境VS2010

2015-05-28 16:20:36 1164

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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