自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Yuwen's Hero

为天地立心,为生民立命,为往圣继绝学,为万世开太平

  • 博客(143)
  • 资源 (1)
  • 收藏
  • 关注

原创 短址(short URL)原理及其实现

前言:最近看了一些关于短址(short URL)方面的一些博客,有些博客说到一些好的东西,但是,也不是很全,所以,这篇博客算是对其它博客的一个总结吧。介绍:短址,顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例。首先我们到 http://goo.gl

2012-07-01 08:26:35 115624 38

原创 把一个字符串通过相邻字符移位变成另一个字符串 [No. 54]

问题:给你两个字符串,比如 ABCD 和 DBCA,通过交换相邻字符的位置,把第一个字符串,变成第二个字符串,打印所有的步骤。比如从ABCD到DBCA,步骤是:ABCD ---> BACD ---> BCAD ---> BCDA ---> BDCA  ---> DBCA分析:如果两个字符串里所含的字符是一样的,只是位置不一样,我们是可以证明通过交换相邻的字符,能够从一个字符串变成另

2012-02-29 07:02:50 4413

原创 扑克洗牌 [No. 69]

给你一副牌,牌的张数为 N ,把它分成 K 堆,每一堆有 T = ( N / K )张 (假定N 能够被 K 整除)。分法如下:从牌的底部取 T 张给第一堆(顺序不变),再从底部取 T 张给第二堆,,,,最后把剩余的 T 张牌给最后一堆。比如,一副牌为 A B C D E F (顺序从上到下),如果把牌分成三堆,第一堆为 E F, 第二堆为 C D,第三堆为 A B。把牌分好以后,然后再重新合

2012-01-05 02:06:25 2039

原创 只使用加法实现减法,乘法和除法 [# 68]

问题:给你两个整数 a 和 b,仅仅使用加法,实现 a - b, a * b, a / b。分析:对于减法,因为 a - b = a + (-1) * b, 换句话说,我们只要得到 b 的相反数,就可以用加法实现 a - b。对于乘法,a * b 相当于是 对 |a| 做 |b| 次连加, 或者对 |b| 做 |a| 次连加,但是,这里我们必须要注意,a 和 b 都有可能是负数。

2012-01-02 02:27:10 16106 8

原创 找出第k大的数[No. 64]

问题:从一个数组里面,找出第K大的数。题目很简单,要想把第K个数找出来,其实也挺容易的。第一种方法:无非就是先排序,比如用Merge Sort算法,整个算法复杂度为 O(NlgN), 然后找到第K个即可。第二种方法:如果k很小,比如第五个最大的数,而整个数组的长度非常的大,那么,还有一种方法就是,我做k遍找最大的数,每做一遍,就把最大的放在数组的最后面,然后减少数组扫描的范围,就可

2011-11-20 04:54:03 9786 1

原创 判断有向图是否有环 [No. 75]

要判断一个有向图是否有环,我们可以选择选择BFS, DFS 或者 Topological sorting. 用BFS或者DFS进行判断时,我们主要判断要被访问的node是否已经被访问过,如果被访问过,就有环。利用topological sorting进行判断的时候,就是判断node是否只有一个node和它连接(算法第八行)(按照树的说法,也就是看那个点是否只有一个父节点)。代码如下(来自wik

2011-11-14 01:55:11 3401

原创 判断一个单链表是否有环,如果有,找出环的起始位置 [No. 36]

How can one determine whether a singly linked list has a cycle?第一种方法是从单链表head开始,每遍历一个,就把那个node放在hashset里,走到下一个的时候,把该node放在hashset里查找,如果有相同的,就表示有环,如果走到单链表最后一个node,在hashset里都没有重复的node,就表示没有环。 这种方法需要O(

2011-11-11 14:26:32 2872 1

原创 一个字典,给你一个word找出所有anagram [No. 18]

所谓anagram, 就是一个词A通过里面字母顺序的变换得到另一个词B,那个B就是A的anagram。现在给你一个词A,然后给你一个字典,这个字典里含有很多次,在字典里找出所有A 的 anagram.这道题的关键点是,怎么去判断两个单词是否是anagram。 这里用到的方法是 把A 进行排序,比如如果A 是 test, 排序后变成 estt, 然后我们把所有要进行比较的也通过排序处理,如果

2011-11-11 13:51:32 2208

原创 交换序列a,b中的元素,使|sum(a)-sum(b)|最小 [No. 49]

有两个序列a,b,大小都为n,序列元素的值任意整数,无序.要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如:   int[] a = {100,99,98,1,2, 3};int[] b = {1, 2, 3, 4,5,40};    求解思路:    当前数组a和数组b的和之差为    A = sum(a) - sum(

2011-11-11 03:33:39 4889 5

原创 最长递增子序列 [No. 39]

给定一个长度为n的数组,找出一个最长的单调递增子序列(不一定连续,当时先后顺序不能乱)。 更正式的定义是:设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=,其中k1。比如数组A 为{10, 11, 12, 13, 1, 2, 3, 15}, 那么最长递增子序列为{10,11,12,13,15}。这道题用DP解,假设从第1位到第 j 位的最长的子序列长度为L(j),那

2011-11-10 09:00:59 2734

转载 判断字符串可否通过另一个字符串的循环移位得到 [No. 34]

假设字符串s1=AABCD,s2=CDAA,判断s2是否可以通过S1的循环移位得到字符串包含。如 s1移两位: 1.ABCDA->2.BCDAA 则此时包含了 S2="CDAA"解题思路: 分解s1的循环移位得到: AABCD,ABCDA,BCDAA,CDAAB,..... 如果我们将前面移走的字符串保留下来,则有: AABCD,AABCDA,AABCDAA,AABCDAA

2011-10-30 22:24:23 2808

原创 字符串匹配(String matching)[No. 76]

字符串匹配就是给定两个字符串 T 和 P, 看T是否完全包含P。 比如 T = abcdeff, P = abce,则P不匹配T,如果P = eff,则P匹配T。非常原始的做法就是从T的第一个字母开始和P进行比较,如果达到P的最后一个字母仍旧是相同的,那么就成立,否则,从T的第二个字母有开始比较;直到T的最后一个字母。这种做法复杂度为O(nm). n 是T的长度, m是P的长度。本文文章介

2011-09-18 04:26:28 1253

转载 骆驼和玉米 [No. 80]

一个骆驮运玉米从A地到B地, 骆驮一次最多运1000个玉米,A地距离B地有1000米远. 而骆驮每走1米就要吃一个玉米.现在有3000个玉米.现在要从A运到B. 问到B地最多还能剩下多少个玉米?wantalcs给出的答案是: class Program{ private static readonly int _maxLoad = 1000; //单次运载上限 pr

2010-07-15 09:21:00 2212

转载 关系数据库的第一第二第三范式

下面这篇文章是我在知乎上看到的,写得非常的清楚明了,所以转载过来。作者:刘慰链接:https://www.zhihu.com/question/24696366/answer/29189700首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一

2016-09-01 04:16:56 1894

原创 不使用栈把二叉树中序输出

问题:把一个二叉树中序输出,但是不能使用栈或者O(n)空间来实现。分析:把二叉树中序输出,我们可以使用递归或者采用非递归方式,但是不管是哪种方式,我们总是需要O(n)的空间,所以如果只能使用常数空间,的确很难想到,但是一旦掌握该种方法,还是挺有用的,至少拓宽了自己解决问题的思路。对于中序遍历,我们总是先输出左子树部分,再root,最后才是右子树部分。对于左子树和右子

2015-08-13 00:07:59 1900

原创 Sum of a tree

You are given a tree, and the nodes in the tree may have more than two child nodes, calculate the sum of the tree where the root to the leaf is considered as a number.public class TreeSum { priv

2013-02-24 12:54:47 2417

原创 Group of 1s in a Matrix

Given a matrix with 1s and 0s, please find the number of groups of 1s. A group is defined by horizontally or vertically adjacent 1s. For example, there are four groups of 1s in figure below.Anal

2013-02-24 12:52:57 2160

原创 Split string to palindrome

Question:Give a string, use minimum number of splits to divide the string into multiple parts in which each part a palindrome. For example, if the string is "abbad", we can split it into "abba" and

2013-02-24 12:52:08 2072

原创 O变X

给你一个n * n 的二维char数组 内部存的是 'X' 和 'O',形式如下X  X  X  X  XX  O  O  O  XX  X  O  O  XX  X  X  O  XX  O  X  X  X编写一个函数将被'X'包围的'O'统统变成'X'。 比如下标为 (1,1) (1,2) (1,3) (2,2) (2,3) (3,3)的'O'需要被变成'X',而下标

2013-02-24 12:50:24 2648

原创 Restore IP Addresses

Given a string containing only digits, restore it by returning all possible valid IP address combinations.For example:Given "25525511135",return ["255.255.11.135", "255.255.111.35"]. (Order do

2013-02-03 00:55:58 1855

原创 Longest Valid Parentheses

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 "()",

2013-01-28 08:35:14 1808

原创 Word Search

Given a 2D board and a word, find if the word exists in the grid.The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically n

2013-01-28 08:33:13 1886

原创 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 no

2013-01-28 08:31:41 2039

原创 Distinct Subsequences

Given a string S and a string T, count the number of distinct subsequences of T in S.A subsequence of a string is a new string which is formed from the original string by deleting some (can be n

2013-01-28 08:29:27 2082

原创 Integer to Roman

Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.public class Solution { public String intToRoman(int number) { int[] values

2013-01-28 08:27:37 17525 6

原创 Sort Colors

Question:Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the

2012-12-27 10:55:56 3611

原创 Spiral Matrix

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.For example,Given n = 3,You should return the following matrix:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [

2012-12-21 00:57:33 1803

原创 Search for a Range

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 t

2012-12-21 00:55:35 1814

原创 Minimum Path Sum

Question:Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.Note: You can only move either dow

2012-12-21 00:54:20 1959

原创 Decode Ways

A message containing letters from A-Z is being encoded to numbers using the following mapping:'A' -> 1'B' -> 2...'Z' -> 26Given an encoded message containing digits, determine the total numb

2012-12-21 00:53:20 1870

原创 Closest node to the target in BST

Question:Give a BST, find a node whose value is closest to the target.public static int closestValue(Node root, int value, int maxDiff) { if (root == null) return Integer.MAX_VALUE; int tempDiff

2012-12-21 00:50:43 2121

原创 不通过比较,找出两个数的最大值

问题:比如:给定两个值 5和10,不通过比较,直接找出最大值。分析:一旦涉及到不用比较找最大值,想都不用想,一般只能通过位运算来实现。 max = a - ((a-b)&((a-b)>>31))或者max = ((a+b)+|a-b|)/2如果找最小值,我们只需把两个值相加,减去max即可。转载请注明出处:http

2012-11-19 02:22:32 3063

原创 n 个人围成一圈(编号1-n),数到3的出列,最后剩下的人的编号

问题:n 个人围成一圈(编号1-n),数到3的出列,然后又从头开始数,一直循环到最后一个人,请问最后剩下的人的编号?public int numberToExit(int total, int interval) { boolean[] arr = new boolean[total]; for(int i = 0; i < arr.length; i++) { arr[i] =

2012-11-19 00:48:57 4044

原创 版本号比较

问题:给定两个版本号,比较哪一个版本号更新。比如 1.2.9 比 1.2.4 新。 1.0.1 比 1.0 新。 思路:当比较版本号时,我们需要从头到尾比较每一组数据。所以,我们需要首先得到版本号的一个数字,第二个数字,第三个数字,然后和另一个版本号码所对应的数字进行比较。代码:public class VersionComparison { public

2012-10-23 11:12:09 7056 2

原创 不用循环反转字符串

问题:这是我今天面试时遇到的一道题。要求不使用循环反转字符串,当时被卡住了,一直没有想到要用递归,后面面试官提示用递归,才想到,哎。分析:递归的思路是:构建一个方法,该方法把返回从0到 i 的反转字符串,如果i = 0, 返回当前字符。public class Reverse { public static void main(String[] args) {

2012-10-12 09:48:43 2156 1

原创 01背包问题

问题:有 N 件物品和一个容量为 M 的背包。第 i 件物品的体积是w[i],价值是p[i]。求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大。分析:这个问题的难点在于它有很多种组合情况,所以,这个问题看似很难在 polynomial 时间内找出最优解。但是,我们的确可以在polynomial时间内找出来。思路如下:对于问题本身,背包的容量是物品的

2012-10-09 08:49:30 1375

原创 check whether two binary trees are identical

Question:Given two binary trees, check whether they are identical or not.Analyze:we first compare the roots of these two trees, if they are the same, we continue to compare the root of the

2012-09-30 21:39:37 938

原创 十度好友

问题:在社交网络里(比如 LinkedIn),如果A和B是好友,B和C是好友,但是A和C不是好友,那么C是A的二度好友,给定一个社交网络的关系图,如何找到某一个人的所有十度好友。分析:如果想找到一个人的十度好友,马上想到的方法应该会是使用深度搜索(DFS)。我们可以从一个点(A),使用深度搜索的方式,当到达第十个点的时候,记录该点并返回到上一层节点,然后继续进行深度搜索,直到A节点的所

2012-09-29 03:17:37 1845 4

原创 毒药和蒸馏水

问题:假设我们有很多瓶无色的液体(比如瓶数大于100瓶),其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在假设只有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,最多能够检测多少瓶液体的成分?分析:这道题的解法非常的巧妙,它使用了二进制来标注每一瓶液体。第一瓶标号是 00001, 第二瓶标号是 00010,

2012-09-27 21:42:38 2920 5

原创 生男生女的面试题

问题:有一个国家的人们只想要男孩,每个家庭都会一直要孩子,直到他们得到一个男孩。如果生的是女孩,他们就会再生一个。如果生了男孩,就不再生了。那么,多年以后男孩多还是女孩多(前提:每次生男孩儿和女孩儿的概率是一样的。)这是在一个网友的面经里见到的一道题,好像也曾经是google的面试题。 网上的答案五花八门,而且大部分是错的,即使有正确的答案,看起来也非常的难懂。下面贴出的是一个

2012-09-19 23:44:57 3441

算法设计与分析 王晓东

算法设计与分析 作者:王晓东 清华大学出版社出版

2010-04-10

空空如也

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

TA关注的人

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