算法
文章平均质量分 58
mzx1317557721
这个作者很懒,什么都没留下…
展开
-
行、列递增的二维数组数字查找
二维数组四分查找问题: 一个二维数组,但行递增、单列递增,编写程序,在数组中查找某个数字(key),要求时间复杂度小于O(N)。 示例数组 1 3 4 2 4 5 4 5 6分析: 对这个问题,首先想到的就是二分查找,对一位数组效率最高的查找方法,能不能用类似的方法来处理这个问题呢? 先看一下二分查找 根据mid与key的关系确定下次查找的范围或输出结束原创 2017-04-16 13:19:17 · 631 阅读 · 0 评论 -
跳台阶 与 矩形覆盖 为啥都是斐波那契数列
跳台阶与矩形覆盖是同一道题跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 矩形覆盖我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 其实我先做的是矩形覆盖,我开始的想法是求从0到n/2个横向放置两个矩形(假设起始是全竖放置)的和,是现在看来好垃圾,无需了解。方法太复杂,花原创 2017-05-11 23:11:05 · 525 阅读 · 0 评论 -
如何取出一个数的第一个非零比特位?
取出一个数的第一个非零比特位,最简单的想法就是通过右移与1,记录右移次数,然后将1左移回去。int first_bit(int n){ int count = 0;//计数器 while(n^1)//第一位为零 { n >>=1; count++; } rerutn (1<<count);}...原创 2017-04-23 13:04:01 · 6625 阅读 · 0 评论 -
一组数字中只有两个数单独出现,其他数成对出现,找出这两个数
在写过一个数字单独出现后,知道全体异或后成对出现的数字将抵消,这次将得到两个单独出现的数字的结果得到两个单独出现数字异或的结果后,把两个数字分离出来就可以了,但通过x^y得到其中一个数字需要另一个数字,无法分离,但是我们知道异或为1的位两个数该位必然不同,通过这个比特位把数字分为两组,再分别异或就可以得到这两个数了void check_num(int *arr, int sz,int *x,int原创 2017-04-23 14:03:53 · 925 阅读 · 0 评论 -
字符串全排列
问题给一个字符串,输出所有的排列方式。问题思路当只有一个字符或没有字符时,直接输出,返回1。处理两个字符的情况:交换——输出——交换——输出。 处理完后保证顺序不变。处理两个以上字符的情况:转化,第 num 个字符有 num 种情况的 num-1 个字符处理,直到到处理两个字符时。 第 i 次处理时交换第 num 与第 i (或第num-1)个字符,再递归处理 num-1 个字符。处理完原创 2017-06-09 19:30:21 · 238 阅读 · 0 评论 -
在旋转之后的已排序数组中查找一个数字
题目在旋转之后的已排序数组中查找一个数字思路解析在已排序数组中查找一个数字我们知道用二分查找,此题目的难点在于中间数(mid)与查找数(key)的大小关系确定后,断点位置与要查找的范围的确定。 数组A 4 5 6 7 8 9 1 2 3 数组B 8 9 1 2 3 4 5 6 7 9 1 为断点位置,当mid>key时最简单的情况当left < key 且 left < mid时,所查找数原创 2017-06-05 22:37:26 · 359 阅读 · 0 评论 -
单链表习题(初级)
题目总览从尾到头打印单链表 删除一个无头单链表的非尾节点 在无头单链表的一个节点前插入一个节点 单链表实现约瑟夫环 逆置/反转单链表 单链表排序(冒泡排序&快速排序) 合并两个有序链表,合并后依然有序 查找单链表的中间节点,要求只能遍历一次链表 查找单链表的倒数第n个节点,要求只能遍历一次链表 思路及代码从尾到头打印单链表递归法,若当前节点不为空,在打印当前节点前打印上一个节点。原创 2017-06-10 21:53:20 · 913 阅读 · 0 评论 -
单链表习题(进阶一)
题目判断单链表是否带环?若带环,求环的长度?求环的入口点?并计算每个算法的时间复杂度&空间复杂度。 判断两个链表是否相交,若相交,求交点。(假设链表不带环) 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】 求带环链表环长(无环返回 -1)思路快慢指针法,快指针一次走两步,慢指针一次走一步,如果链表带环,则从慢指针到达入口点开始,由于快慢指针都在环上移动,每次移动快指针原创 2017-06-12 22:54:06 · 429 阅读 · 0 评论 -
单链表习题(进阶二)——复杂链表复制
题目复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。 解法一(暴力求解) 1. 这个复杂链表是以单链表为基础的,可以先复制一个单链表,random 指针在原链表上的位置与新链表是相对应的,建立同步投影指针 shadow,与 cur 在原链表上同步,找新链表上的原创 2017-06-15 11:26:21 · 448 阅读 · 0 评论