面试题
文章平均质量分 69
静水流风
精通C++,喜欢研究算法
展开
-
Gas Station (环形加油站)
题目:有n个加油站首尾相连成一个圆,已知每个加油站的油量,以及从第i个加油站到第i+1个加油站需消耗的油量,问:能否开车从某个加油站出发,循环一圈又回到起点,如果可以返回出发的起点(车的邮箱容量是无限的)。原创 2014-11-14 10:29:26 · 1850 阅读 · 0 评论 -
Longest Palindromic Substring (最长回文子串)
题目:https://oj.leetcode.com/problems/longest-palindromic-substring/翻译 2014-11-14 21:11:17 · 470 阅读 · 0 评论 -
如何快速判断这几个数是否在那40亿个数当中?
给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit转载 2014-11-11 11:45:42 · 1229 阅读 · 0 评论 -
给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
这个题目目只要我们可以从 n 个数中随机选出 1 到 n 个数,反复进行这种运算,直到剩下最后一个数即可。我们可以调用 n 次给定函数,生成 n 个 1 到 5 之间的随机数,选取最大数所在位置即可满足以上要求。例如初始的 7 个数 [1,2,3,4,5,6,7].7 个 1 到 5 的随机数 [5, 3,1,4,2,5,5]那么我们保留下[1,6,7],3 个原创 2014-11-16 10:28:07 · 814 阅读 · 0 评论 -
给定一个未知长度的整数流,如何随机选取一个数?
方法1.将整个整数流保存到一个数组中,然后再随机选取。如果整数流很长,无法保存下来,则此方法不能使用。 方法2.如果整数流在第一个数后结束,则我们必定会选第一个数作为随机数。如果整数流在第二个数后结束,我们选第二个数的概率为1/2。我们以1/2的概率用第2个数替换前面选的随机数,得到满足条件的新随机数。....如果整数流在第n个数后结束,我们选第n个数的概率为1/n原创 2014-11-16 15:10:40 · 1337 阅读 · 0 评论 -
设计一个数据结构,其中包含两个函数,1.插入一个数字,2.获得中数。并估计时间复杂度。
1. 使用数组存储。插入数字时,在O(1)时间内将该数字插入到数组最后。获取中数时,在O(n)时间内找到中数。(选数组的第一个数和其它数比较,并根据比较结果的大小分成两组,那么我们可以确定中数在哪组中。然后对那一组按照同样的方法进一步细分,直到找到中数。) 2. 使用排序数组存储。插入数字时,在O(logn)时间内找到要插入的位置,在O(n)时间里移动元素并将新数字插转载 2014-11-16 18:18:02 · 1662 阅读 · 0 评论 -
Manacher算法
给定一个子符串S,找出最长回文子串原创 2014-11-15 13:25:02 · 421 阅读 · 0 评论 -
判断一个自然数是否是某个数的平方
方法1:遍历从1到N的数字,求取平方并和N进行比较。如果平方小于N,则继续遍历;如果等于N,则成功退出;如果大于N,则失败退出。复杂度为O(n^0.5)。 方法2:使用二分查找法,对1到N之间的数字进行判断。复杂度为O(log n)。 方法3:由于(n+1)^2=n^2 + 2n + 1,= ...= 1 + (2*1 + 1) +原创 2014-11-16 14:34:42 · 2552 阅读 · 0 评论 -
1024! 末尾有多少个0?
末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数。转载 2014-11-15 20:26:04 · 646 阅读 · 0 评论 -
编程实现两个正整数的除法
编程实现两个正整数的除法,当然不能用除法操作符。原创 2014-11-16 19:06:31 · 1152 阅读 · 0 评论 -
谷歌面试题:在一个特殊数组中进行查找
给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。请在这个特殊数组中找出给定的整数。转载 2014-11-16 18:26:47 · 431 阅读 · 0 评论 -
[LeetCode] Divide Two Integers
题目源地址:https://oj.leetcode.com/problems/divide-two-integers/题目:原创 2014-11-18 09:00:02 · 641 阅读 · 0 评论 -
计算一个无符整数中1Bit的个数
Count the number of bits that are on in an unsigned integer(计算一个无符整数中1Bit的个数)-- (1)By williamxue on May 20, 2007计算一个无符号整数中有多少的Bit为1原创整理,转载请注明出处。这是一个经常遇到的经典问题,这里分两个部分讲解和总结,首先对讲解现有的算法,转载 2014-11-27 21:46:24 · 709 阅读 · 0 评论 -
判断数组中是否包含重复数字
给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留) 方法1.对数组进行排序(快速,堆),然后比较相邻的元素是否相同。时间复杂度为O(nlogn),空间复杂度为O(1)。方法2.使用bitmap方法。定义长度为N/8的char数组,每个bit表示对应数字是否出现过。遍历数组,使用 bitmap对数字是否出现转载 2014-11-30 14:53:01 · 1688 阅读 · 0 评论 -
编一个程序求质数的和
编一个程序求质数的和,例如F(7) = 2+3+5+7+11+13+17=58。 方法1:对于从2开始的递增整数n进行如下操作:用 [2,n-1] 中的数依次去除n,如果余数为0,则说明n不是质数;如果所有余数都不是0,则说明n是质数,对其进行加和。 空间复杂度为O(1),时间复杂度为O(n^2),其中n为需要找到的最大质数值(例子对应的值为17)方法2:可转载 2014-11-30 16:55:49 · 2441 阅读 · 0 评论 -
Regular Expression Matching -- leetcode
Implement regular expression matching with support for '.' and '*'.'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover the entire input原创 2014-12-16 14:05:53 · 617 阅读 · 0 评论 -
Permutations -- leetcode
Given a collection of numbers, return all possible permutations.For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].全排列,从全体元素中挑一个原创 2015-01-24 16:17:29 · 590 阅读 · 0 评论 -
数组中是否有两个数的和为10
1.比较任意两个数的和是否为10。如for (int i = 0; i 复杂度为O(n*n)。 2.将数组排序后,对每个数m,使用二分查找在数组中寻找10-m。复杂度为O(nlogn)。 3.将数组存储到hash_set中去,对每个数m,在hash_set中寻找10-m。复杂度为O(n)。 4.如果数组很大,超过内存的容量,可以按照hash(转载 2014-12-02 16:49:16 · 2118 阅读 · 0 评论 -
Container With Most Water -- leetcode
Given n non-negative integers a1, a2, ...,an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of linei is at (i, ai) and (i, 0). Find原创 2014-12-17 11:50:31 · 537 阅读 · 0 评论 -
Integer to Roman -- leetcode
Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.class Solution {public: string intToRoman(int num) { char symbol[] = {'I',原创 2014-12-18 11:06:53 · 720 阅读 · 0 评论 -
Next Permutation -- leetcode
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.If such arrangement is not possible, it must rearrange it as the lowest possible o原创 2015-01-09 11:32:09 · 493 阅读 · 0 评论 -
Longest Common Prefix -- leetcode
Write a function to find the longest common prefix string amongst an array of strings.方法一,单个字符横向全体比较,纵向逐个的收集。class Solution {public: string longestCommonPrefix(vector &strs) { i原创 2014-12-19 15:18:26 · 563 阅读 · 0 评论 -
3Sum -- leetcode
Given an array S of n integers, are there elements a,b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note:Elements in a triplet (a,b,c) m原创 2014-12-20 14:36:29 · 414 阅读 · 0 评论 -
Rotate Image -- leetcode
You are given an n x n 2D matrix representing an image.Rotate the image by 90 degrees (clockwise).Follow up:Could you do this in-place?根据一个点坐标计算出其他三个点的位置。可以依据,每个点到外边框的对应距离相等,推算坐标。原创 2015-01-28 11:18:10 · 493 阅读 · 0 评论 -
股市买入卖出时间点选择问题
题目:给你一个股价序列,告诉你每个时间点的股价,问你什么时候买什么时候卖获利最大。时间复杂度越低越好。 解答:方法一:只需要从左往右遍历一遍序列Sequence[N],获得每一个元素对应的左边的最小值即可。例如,设为min[N]。再次遍历序列时,通过计算Sequence[i] - min[i],并获得最大值即可。当然,本题还要求给出买入卖出位转载 2014-12-04 17:41:28 · 720 阅读 · 0 评论 -
Roman to Integer -- leetcode
Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.class Solution {public: int romanToInt(string s) { int weight[26];原创 2014-12-19 13:53:09 · 496 阅读 · 0 评论 -
3Sum Closest -- leetcode
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly原创 2014-12-20 21:41:18 · 489 阅读 · 0 评论 -
Best Time to Buy and Sell Stock -- LeetCode
原题链接: http://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock/ 这道题求进行一次交易能得到的最大利润。如果用brute force的解法就是对每组交易都看一下利润,取其中最大的,总用有n*(n-1)/2个可能交易,所以复杂度是O(n^2)。很容易感觉出来这是动态规划的题目,其实跟Maximum Subarra原创 2014-12-04 18:08:45 · 410 阅读 · 0 评论 -
Longest Valid Parentheses -- leetcode
Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.For "(()", the longest valid parentheses substring is "()", which原创 2015-01-10 17:21:17 · 487 阅读 · 0 评论 -
Search in Rotated Sorted Array -- leetcode
Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).You are given a target value to search. If found in the array return its原创 2015-01-10 20:19:23 · 420 阅读 · 0 评论 -
数组中数对差最大
题目:数组中某数字减去其右边的某数字得到一个数对之差,求所有数对之差的最大值。例如:数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11(16 - 5)分析:看到这个题目,很多人的第一反应是找到这个数组的最大值和最小值,然后觉得最大值减去最小值就是最终的结果。但由于我们无法保证最大值一定位于数组的左边,因此这个思路不管用。让每一个数字逐个减转载 2014-12-05 16:32:12 · 607 阅读 · 0 评论 -
LeetCode:Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i.Design an algorithm to find the maximum profit. You may complete at most two transactions.Note:You may not转载 2014-12-05 15:57:39 · 427 阅读 · 0 评论 -
Best Time to Buy and Sell Stock III -- LeetCode
原题链接: http://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/ 这道题是Best Time to Buy and Sell Stock的扩展,现在我们最多可以进行两次交易。我们仍然使用动态规划来完成,事实上可以解决非常通用的情况,也就是最多进行k次交易的情况。这里我们先解释最多可以进行k次交易的算法,转载 2014-12-05 15:53:31 · 436 阅读 · 0 评论 -
Search for a Range -- leetcode
Given a sorted array of integers, find the starting and ending position of a given target value.Your algorithm's runtime complexity must be in the order of O(log n).If the target is not found in原创 2015-01-11 19:01:12 · 414 阅读 · 0 评论 -
Search Insert Position -- leetcode
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.You may assume no duplicates in the array.原创 2015-01-11 21:18:07 · 430 阅读 · 0 评论 -
Anagrams -- leetcode
Given an array of strings, return all groups of strings that are anagrams.Note: All inputs will be in lower-case.算法思路:将单词进行排序。用map统计排序后相等的出现次数。将次数大于1的单词放入结果集。第1次出现时,因次数最终是否大于1不明郎,将其暂存入原创 2015-01-31 12:47:19 · 521 阅读 · 0 评论 -
4Sum -- leetcode
Given an array S of n integers, are there elements a,b, c, and d in S such that a + b +c + d = target? Find all unique quadruplets in the array which gives the sum of target.Note:Elements原创 2014-12-22 22:11:47 · 479 阅读 · 0 评论 -
Find Minimum in Rotated Sorted Array -- leetcode
Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).Find the minimum element.You may assume no duplicate exists in原创 2014-12-06 17:52:45 · 422 阅读 · 0 评论 -
Find Minimum in Rotated Sorted Array II -- leetcode
Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed?Would this affect the run-time complexity? How and why?Suppose a sorted array is rotated at some pivot u原创 2014-12-06 19:25:45 · 478 阅读 · 0 评论 -
Letter Combinations of a Phone Number -- leetcode
Given a digit string, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is given below.Input:Digit string原创 2014-12-23 17:10:02 · 754 阅读 · 0 评论