关闭

[置顶] 短址(short URL)原理及其实现

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

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

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

[置顶] 扑克洗牌 [No. 69]

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

[置顶] 只使用加法实现减法,乘法和除法 [# 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 都有可能是负数。...
阅读(7840) 评论(8)

[置顶] 找出第k大的数[No. 64]

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

[置顶] 判断有向图是否有环 [No. 75]

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

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

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

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

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

[置顶] 交换序列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(...
阅读(4287) 评论(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),那...
阅读(2472) 评论(0)

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

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

[置顶] 字符串匹配(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的长度。 本文文章介...
阅读(994) 评论(0)

[置顶] 骆驼和玉米 [No. 80]

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

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

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

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

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

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...
阅读(1891) 评论(0)

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...
阅读(1750) 评论(0)

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...
阅读(1725) 评论(0)

O变X

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

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...
阅读(1565) 评论(0)

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 "()",...
阅读(1549) 评论(0)

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...
阅读(1633) 评论(0)

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...
阅读(1786) 评论(0)

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...
阅读(1813) 评论(0)

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...
阅读(10145) 评论(5)

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...
阅读(3295) 评论(0)

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 ], [...
阅读(1557) 评论(0)

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...
阅读(1571) 评论(0)

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...
阅读(1705) 评论(0)

Decode Ways

A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 Given an encoded message containing digits, determine the total numb...
阅读(1646) 评论(0)

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...
阅读(1820) 评论(0)

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

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

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] =...
阅读(3168) 评论(0)
143条 共8页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:598936次
    • 积分:6544
    • 等级:
    • 排名:第4059名
    • 原创:122篇
    • 转载:21篇
    • 译文:0篇
    • 评论:177条
    文章分类
    最新评论