面试
desionwang
这个作者很懒,什么都没留下…
展开
-
判断连个单链表是否交叉,并找到交叉点
链表如果相交则两个链表的形态应该是Y或者是V型,所以判断两个链表是否相交有两种方式:一、比较两个链表的尾部是否相同,如果相同则两个链表相交,交叉点可以通过两个链表的长度差进行计算,因为交点后面的长度是相同的,差值是交点前形成的,可以分别设定两个指针,长的链表先遍历到差值的位置,短的链表指向头部,分别遍历直到相等就是交点的所在。int IsCross(ListNode *p,ListNode原创 2013-07-12 18:00:12 · 3008 阅读 · 0 评论 -
折半查找(二分搜索)的应用和技巧全面总结
折半查找应该算是算法中比较简单常见,但却很实用的方法之一了,又叫做二分搜索,其应用比较广泛,可以用于排序数组中元素的查找,复杂度仅为log(N),也可以用于有序数组中插入元素等等,一般而言针对排序数组的一些算法都会活多或少的用到折半查找活折半查找的思想,折半查找的实现主要分为两种方式,一种是遍历非递归形式,一种是采用递归的形式。1、非递归形式,这种实现主要是通过每次调整中点的位置来实现。原创 2013-10-28 17:39:59 · 3419 阅读 · 0 评论 -
求k个数组包含每个数组至少一个元素的最小范围(待字闺中,备忘)
有k个有序的数组,请找到一个最小的数字范围。使得这k个有序数组中,每个数组都至少有一个数字在该范围中。例如:1: 4, 10, 15, 24, 262: 0, 9, 12, 203: 5, 18, 22, 30所得最小范围为[20,24],其中,20在2中,22在3中,24在1中。这是待字闺中的一道面试题,就个人经原创 2013-10-23 15:47:16 · 3536 阅读 · 1 评论 -
数组中超过N分之一的数字
寻找数组中超过一半的元素,这是一道十分经典和普遍的面试题了,实现起来比较容易,只是需要写技巧,将问题扩展就可以衍生到求数组中错过N分一的元素。/************************************************************************* > File Name: morethanharf.c > Auth原创 2013-11-01 17:53:02 · 2810 阅读 · 0 评论 -
最长回文串算法
给定一个字符串找出最长回文字符串范围,例如abaabac,最长回文为abaaba1、使用暴力的算法需要O(N^3)的复杂度,需要O(N^2)的复杂度去运算字符串所用的子串,然后使用O(N)去判断是否是回文串,从而定位最长的回文子串。2、使用动态规划的思想进行求解,思路是利用子串从短到长进行逐步的动态规划求解,然后从短向长蔓延进行计算:当i == j 时 肯定是长度为1 的回文串,dp[原创 2013-09-30 10:08:15 · 5525 阅读 · 0 评论 -
平方根(sqrt)算法
最近听说开平方算法挺难写,自己思考一下确实这些库函数只是一直在用,但是很少去思考如何实现的,sqrt在排序中使用频率非常的高,所以就研究了一下。大概有三种实现方式。一、用二分的方法 每次用中间数就试,如果大就到左区间选取中间数试,如果小就到右区间找中间数试,采用不断逼近的方式计算平方根,这种方式迭代次数有点多,且每次试验都要进行运算,效率不是很高,但是思路简单,巧妙的运用了二原创 2014-07-22 18:16:05 · 10479 阅读 · 0 评论 -
求数组连续最大和
面试的时候已经不是第一次遇到这个问题,该问题的解法也非常的多,穷举,分治,DP,扫描,复杂度也不尽相同,可以说题目很小,但是蕴含的技巧和算法知识却很多。题目大致如下:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组原创 2013-12-03 10:59:27 · 2271 阅读 · 0 评论