算法
文章平均质量分 75
jiyanfeng1
喜欢算法和编程的工科男
展开
-
[LeetCode] Gas Station 加油站问题
相关问题1:https://blog.csdn.net/jiyanfeng1/article/details/39361485There areNgas stations along a circular route, where the amount of gas at stationiisgas[i].You have a car with an unlimited gas ...转载 2019-05-03 21:17:45 · 652 阅读 · 0 评论 -
判断整数序列是不是二元查找树的后序遍历结果
判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此原创 2012-09-13 11:39:17 · 549 阅读 · 0 评论 -
[LeetCode] Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be partially filled, where empty cells are filled with the character '.'.A partially fille原创 2014-12-20 21:10:19 · 685 阅读 · 0 评论 -
在二叉树中,距离最远的两个节点的距离
在二叉树中,找到距离最远的两个节点的距离在二叉树中,找到距离最远的两个节点的距离。在上面的二叉树中,最远的节点的距离是:4(路径是2-3-13-5-2)。解决思路:递归。最远的两个节点,要么都在根节点的左子树,要么在都在根节点的右子树,要么分别在左子树和右子树,还有可能是深度最深的节点和根节点距离最远。代码如下:int longest_dis(N原创 2012-09-06 14:11:18 · 7212 阅读 · 0 评论 -
加油站-汽车问题
给定两个数列 P 和 D。P[i] 代表第 i 个加油站的油量,D[i] 代表从当前加油站到下一个加油站的距离。汽车每走单位距离,就会消耗单位油量。注意:加油站是环形单链表状的分布,也就是说,从当前加油站只能沿着一条仅有的路去向下一个加油站。求一个起始加油站,从这个加油站出发,可以遍历所有加油站。思路:通过 arr[i] = D[i] - P[i] 得到一个新的数组。用Kadane算法找出原创 2013-02-06 14:41:14 · 1037 阅读 · 0 评论 -
数组中三个只出现一次的数字
此文转自:http://zhedahht.blog.163.com/blog/static/25411174201283084246412/此问题的相关问题:数组中两个只出现一次的数字:http://blog.csdn.net/jiyanfeng1/article/details/8037807题目:一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一转载 2012-10-17 12:06:32 · 2809 阅读 · 0 评论 -
数组中只出现一次的数字
本文转自:http://zhedahht.blog.163.com/blog/static/2541117420071128950682/题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个转载 2012-10-03 11:10:34 · 689 阅读 · 0 评论 -
稳定匹配问题Stable Match Problem -- 稳定婚姻问题 Stable Marriage Problem
稳定匹配问题Stable Match Problem转自:http://hi.baidu.com/revinfly/item/e48b6fbab5145bf662388e95问题的提出 《算法》的第一堂课讲了关于稳定匹配(Stable Matching)的问题,这是一个由现实情况引出的一个很有趣的问题。假设说现有一堆学生准备到一堆公司实习,每个学生心目中对这些公司都有一个转载 2012-10-09 23:28:24 · 9859 阅读 · 2 评论 -
稳定婚姻算法
Gale-Shapley 算法 1962年,美国数学家 David Gale 和 Lloyd Shapley 发明了一种寻找稳定婚姻的策略。不管男女各有多少人,也不管他们的偏好如何,应用这种策略后总能得到一个稳定的搭配。换句话说,他们证明了稳定的婚姻搭配 总是存在的。有趣的是,这种策略反映了现实生活中的很多真实情况。 在这种策略中,男孩儿将一轮一转载 2014-09-14 03:49:19 · 2777 阅读 · 0 评论 -
从输入流随机取数
Reservoir Sampling 从输入流随机取数翻译 2014-09-22 09:11:13 · 818 阅读 · 0 评论 -
随机洗牌
Write a method to shuffle a deck of cards. It must be a perfect shuffle - in other words,each 52! permutations of the deck has to be equally likely. Assume that you are givena random number genera转载 2014-09-22 08:42:04 · 579 阅读 · 0 评论 -
100盏灯泡的亮灭
问题:有100盏灯泡,第一轮点亮所有电灯,第二轮每两盏灯熄灭一盏,即熄灭第2盏,第4盏,以此类推,第三轮改变编号为3的倍数的电灯,第3盏,第6盏,如果原来那盏灯是亮的,就熄灭它,如果原来是灭的,就点亮它,以此类推,直到第100轮。问第100结束后,还有多少盏灯泡是亮的?解答:由题意最如果最后某一盏灯是亮着的,那么它一定是被切换了奇数次(第0次的时候全部都关着)。原创 2012-10-18 01:57:20 · 6390 阅读 · 2 评论 -
[LeetCode] Remove Duplicates From Sorted Array I
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with co原创 2014-12-20 21:57:20 · 539 阅读 · 0 评论 -
[LeetCode] 格雷码(Gray Code)
格雷码是一种数字排序系统,其中的所有相邻整数在它们的二进制数字表示中只有一个数字不同。现要求打印出二进制比特数是n的所有格雷码。例如,n=2,所有的格雷码是0,1,3,2(对应二进制表示是00,01,11,10)。思路一:如果仔细观察格雷码的规律,可以发现,对于n比特的格雷码,前2^(n-1)个格雷码的前n-1比特和后2^(n-1)个格雷码的前n-1比特是对称的,前2^(n-1)个格雷码的原创 2012-10-14 06:38:13 · 3564 阅读 · 0 评论 -
[LeetCode] Add Binary 加法
Given two binary strings, return their sum (also a binary string). For example, a = "11", b = "1" Return "100".逐位相加,记录相加的和sum,和进位carry。注意用到了一个有用的函数 to_string() 把整数变成string。string addBinary(strin原创 2014-12-09 10:41:56 · 488 阅读 · 0 评论 -
[LeetCode] Rectangle Area II
相关问题1:https://blog.csdn.net/jiyanfeng1/article/details/41616781问题描述和解答:https://leetcode.com/articles/rectangle-area-ii/原创 2019-05-02 22:46:03 · 357 阅读 · 0 评论 -
[LeetCode] Image Overlap 图像重叠
Two imagesAandBare given, represented asbinary, square matrices of the same size. (A binary matrix has only 0s and 1s as values.)We translate one image however we choose (sliding it left, righ...转载 2019-05-02 22:32:34 · 616 阅读 · 0 评论 -
[LeetCode] Fraction to Recurring Decimal
Given two integers representing the numerator and denominator of a fraction, return the fraction in string format. If the fractional part is repeating, enclose the repeating part in parentheses. For e原创 2015-08-03 06:44:33 · 612 阅读 · 0 评论 -
直方图最大矩形问题(Largest Rectangle in Histogram)
有n个非负整数,代表直方图中每个bar的高度,每个bar的宽度是1。找到此直方图中面积最大的矩形。 6 5 ___ ___| | | | | 3 2 | | | 2 ___ ___ 1 | | |___| | | |__原创 2013-02-02 05:08:15 · 4537 阅读 · 1 评论 -
从输入流中随机抽取m个元素
从输入流中随机抽取k个元素有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得m个记录。思路:我们可以用Fisher-Yates随机排列算法解决该问题。用大小为m的数组arr[0:m-1]来保存随机抽取的元素,arr[0:m-1]逐步初始化为输入流的前m个元素的一个随机排列。对于输入流中的第k (k>m)个元素,随机生成一个[0,k-1原创 2012-09-03 14:18:47 · 5169 阅读 · 1 评论 -
从二叉树中随机选择节点
给定一个二叉树,要求随机选择树上的一个节点。解法:遍历树的过程中,随机选择一个节点即可。具体做法参看:从输入流中随机抽取m个元素原创 2015-07-15 05:58:53 · 1733 阅读 · 0 评论 -
生成随机数, random 5, random 7
给定一个范围是1到5的随机整数生成器,设计一个范围是1到7的随机整数生成器。解法:int rand7(){ int vals[5][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 1, 2, 3 }, { 4, 5, 6, 7, 1 }, { 2, 3, 4, 5, 6 }, {原创 2015-02-05 12:13:21 · 4211 阅读 · 0 评论 -
[LeetCode] Roman to Integer
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.代码:inline int map(const char c) { switch (c) { case 'I': return 1; case 'V':原创 2014-12-26 18:10:33 · 513 阅读 · 0 评论 -
[LeetCode] Integer to Roman
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.string intToRoman(int num) { const int radix[] = {1000, 900, 500, 400, 100, 90,原创 2014-12-26 18:08:26 · 544 阅读 · 0 评论 -
[LeetCode] Determine if two rectangles overlap
Given two axis-aligned rectangles A and B. Write a function to determine if the two rectangles overlap.从问题的反面入手,先看看什么情况下两个长方形不重叠。不重叠的条件是:( P2.y P4.y || P2.x P4.x )直接给代码:struct Poin原创 2015-01-15 06:09:10 · 1071 阅读 · 0 评论 -
[LeetCode] 回文数字 Palindrome Number
给你一个正整数,如何判断它是不是回文数字?例如,12344321是回文数字,1234593不是回文数字。方法一:先把原先的数字反转,然后看反转数字和原来的数字是否相等。反转的算法如下:int reverse(int num) { assert(num >= 0); // for non-negative integers only. int rev = 0; while原创 2013-02-25 11:25:58 · 1056 阅读 · 0 评论 -
Number of Unique BST 二叉搜索树的个数
给你一个正整数 n, 代表了BST中节点的个数。那么可以构造出多少个异构的BST。例如: n=3时,有5个异构的BST,如下所示。 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \原创 2013-02-27 11:57:11 · 2333 阅读 · 0 评论 -
最近的Fibonacci数
给你一个整数,找到离这个整数最近的Fibonacci数。思路:最近的Fibonacci数既可能比给定的整数大,还可能小于给定的整数。我们可以找到两个Fibonacci数,一个比给定数小,另一个比给定数大。然后从二者里选一个最近的。int closestFibo(int num){ int f1 = 1; int f2 = 1; while(f2<=num && f1<=num)原创 2013-02-27 09:04:47 · 1067 阅读 · 0 评论 -
如果判断一个32bit整数是个回文整数?
How to check if the binary representation of an integer is a palindrome?http://stackoverflow.com/questions/845772/how-to-check-if-the-binary-representation-of-an-integer-is-a-palindromehttp://原创 2012-12-14 04:09:23 · 1039 阅读 · 0 评论 -
交换次数最少的排序
In-place的排序算法,在排序过程中需要对两个元素进行两两的交换。问,什么样的排序算法,在排序过程中进行交换的次数最少?答:选择排序是常用算法中交换次数最少的排序算法。还有一个算法叫Cycle Sort。关于这个问题的讨论,参见下面的论述:Which sorting algorithm makes minimum number of memory writes?原创 2012-10-07 03:17:54 · 11964 阅读 · 0 评论 -
怎么把一个字节里的比特顺序倒转?
思路1:查表法。查表法速度最快。unsigned char reverse_byte(unsigned char x){ static const unsigned char table[] = { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0, 0x3原创 2012-10-02 11:50:17 · 5138 阅读 · 1 评论 -
快速求出整数的二进制表示中包含的bit 1的个数
比如,5的二进制表示中,bit 1的个数是2.代码如下:int bit_cnt(int n){ int result = 0; for (; n; n &= n-1, ++result); return result;}原创 2012-10-02 00:08:15 · 1736 阅读 · 0 评论 -
找出0,1,2,3,...,n中,包含的数字2的个数。
找出0,1,2,3,...,n中,包含的数字2的个数。比如,0,1,2,3,4,...,12包含的2的个数是2(2和12分别包含一个2).又如,0,1,2,...,25,包含8个2.可以用递归的方法做这个题,代码如下,易读性还是很好的,就不多解释了。#include "stdio.h"#include "stdlib.h"int count2sR(int n){ if(n==原创 2012-09-14 03:25:57 · 1965 阅读 · 0 评论 -
不用+、-、×、÷做加法
写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。前面我们就在想,求两数之和四则运算都不能用,那还能用什么啊?对呀,还能用什么呢?对数字做运算,除了四则运算之外,也就只剩下位运算了。位运算是针对二进制的,我们也就以二进制再来分析一下前面的三步走策略对二进制是不是也管用。5的二进制是101,17的二进制10001。还是试着把计算分成三步:第一步各位相加但不计进位,得到的原创 2012-09-13 11:58:47 · 2575 阅读 · 0 评论 -
一个小圆沿着大圆圆周滚动,求小圆转动周数
两个圆环,半径分别是1和2,小圆在大圆内部绕大圆一周,小圆自身转几周?如果在大圆外部,小圆自身转几周? 这个题的思路如下:小圆圆心,小圆和大圆的接触点有着不同的角速度。小圆在大圆内部滚动时,二者的比值是1:2.小圆在大圆内部滚动时,二者的比值是3:2.不论小圆在大圆里还是在大圆外,小圆大圆的接触点绕小圆心转数总是2周。所以,小圆在大圆内部滚动时,小圆心绕大圆心滚动1周。原创 2012-10-02 05:48:39 · 17749 阅读 · 0 评论 -
找出一个字符串的所有anagram
给定一个字符串集合S和一个字符串str。要求设计一个数据结构,能够快速找出集合S里所有的、是str的anagram的字符串。思路:首先,要分析什么样的字符串才可以互称为anagram。两个字符串如果是anagram,它们经过排序后得到的两个字符串一定相等。或者,两个字符串如果是anagram,它们包含的字符的频率一定相等。所以,基于anagram的这两个性质,可以有以下两种数据结构方案原创 2012-10-02 13:07:24 · 3780 阅读 · 0 评论 -
整数的二进制表示中1的个数
整数的二进制表示中1的个数题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。分析:因为数字本身就是以二进制形式存储的,所以可以利用bit-operator来统计1的个数。代码如下:#include "stdio.h"int count_one(int num){ in原创 2012-08-24 07:14:21 · 3059 阅读 · 0 评论 -
在二叉树中找到指定的元素,如果有重复出现的元素,要求元素为深度最深的任何一个。
在二叉树中找到指定的元素,如果有重复出现的元素,要求元素为深度最深的任何一个节点定义如下:struct Node{ int data; Node* left; Node* right; Node(int data, Node* left, Node* right) { this->data = data; this->left = left; this->rig原创 2012-08-23 05:31:51 · 5129 阅读 · 0 评论 -
扑克牌的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。思路:网上常见的思路是对五张牌进行排序。这里有一种不需要排序的算法,用到了Hashtable。具体描述如下:将抽到的五张牌,依次存入hashtable。key为牌上的数字,value为1.如果抽到了大王或者小王,那么key是原创 2012-10-03 06:03:30 · 970 阅读 · 0 评论 -
有n 个长为m+1 的字符串,求前后m个字符匹配所能形成的最长字符串链
有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。可以用hash table来做。大致思路如下:初始化两个hash表,一个是前缀hashtable,一个是后缀hashtable。前缀hashtable的键为字符串的前m个字符,值为字符串最后一个字符。后缀hashta原创 2012-09-21 12:56:18 · 1716 阅读 · 0 评论