算法
限量发行x
限量发行
展开
-
关于已知两点经纬度求球面最短距离的公式推导
已知两点经纬度计算球面距离的公式,一搜一大堆,形式如下:可是至于这个公式为什么是这样的,今天推导了一下,详细推导过程如下。首先画个图(图1),要不然空间想象能力差的话容易犯糊涂。首先对图1做个大致的说明,红色的半圆表示赤道,蓝色的圆弧表示本初子午线(也就是经度为0的子午线)。球最上方是北极点,点A和点B分别为要计算的两个点,坐标分别为A(jA,wA)和B(jB,wB)。图1 示意图...转载 2017-03-04 11:10:24 · 2312 阅读 · 1 评论 -
bfs 广度优先遍历的应用 --CountHomes
题目:为了进行城市规划,需要计算一个居住区的住宅数目。该居住聚集区俯视图已经制好,并规划为n x m个网格。如果网格单元具有屋顶定的一部分,则向其赋值1,如果是空地,则赋值0.由值为1的相邻网格单元组成的簇认定为一个单独建筑。对角放置的值为1的网格则不被视为同一住宅(屋顶)。类Homes的方法countHomes的输入应包括一个n x m阶的二维整数数组grid,其中n和m分别表示输入数组原创 2016-06-15 22:12:53 · 672 阅读 · 0 评论 -
单词接龙 WordsCanRange --欧拉回路和欧拉路的应用
题目:拉姆刚开始学习英文单词,对单词排序很感兴趣。如果给拉姆一组单词,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一单词的为字母相同。你能编写一个程序来帮助拉姆进行判断吗?输入描述: 输入包含多组测试数据。 对于每组测试数据,第一行为一个正整数n,代表有n个单词。 然后有n个字符串,代表n个单词。保证: 2输出描述:对于每组原创 2016-06-15 17:25:38 · 714 阅读 · 0 评论 -
PerfectNumber(完数)判断算法-- Java
问题描述:若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数。简称“完数”例如:6=1+2+3 28=1+2+4+7+14496=1+2+4+8+16+31+62+124+2488128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064编写一个算法判断n是否为完数。public clas原创 2016-07-13 09:46:46 · 3717 阅读 · 0 评论 -
Sieve of Eratosthenes(埃拉托斯特尼素数筛选法)--java实现
埃拉托色尼筛选法埃拉托色尼选筛法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种筛选法。 是针对自然数列中的自然数而实施的,用于求一定范围内的质数。步骤(1)先把1删除(现今数学界1既不是质数也不是合数)(2)读取队列中当前最小的数2,然后把2的倍数删去(3原创 2016-07-11 14:58:21 · 4665 阅读 · 1 评论 -
输出集合的所有子集
题目描述:输出含有n个元素集合的所有子集。例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}.输入:abc输出:cbabacaacbbcnull解题思路:递归思路:* 例如:对于集合{a,b,c}来说,我们如果获得它的所有子集,我们可以分两部转载 2016-06-06 22:14:36 · 987 阅读 · 0 评论 -
与位运算相关的编程题
1.求下面函数的返回值(微软) -- 统计1的个数-------------------------------------int func(int x){ int countx = 0; while(x) { countx++; x = x&(x-1); } return countx;}原创 2016-04-09 16:21:51 · 581 阅读 · 0 评论 -
判断一个单链表是否有环及环的连接点
给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少? 解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。2、对于问题2,记录下问题1的碰转载 2016-05-09 10:03:13 · 821 阅读 · 0 评论 -
递归入门 Java
对于强大的递归。要想做到灵活运用,是需要花时间进行练习并总结。往往递归学习的入门也是难度也比较大,常常会处于看得明,却写不出的"尴尬"情况。递归的定义将一个大的问题分解成比较小的、有着相同形式的问题。递归是一种强有力的思想。在计算机科学的学习中,一个重要的必须学习的概念是递归。递归是一种编程策略,它把一个大的问题分解成具有相同形式的简单问题。原创 2016-06-07 17:08:37 · 1903 阅读 · 0 评论 -
LeetCode - Minimum Depth of Binary Tree
原题链接:http://oj.leetcode.com/problems/minimum-depth-of-binary-tree/ 这道题是树的题目,其实跟Maximum Depth of Binary Tree非常类似,只是这道题因为是判断最小深度,所以必须增加一个叶子的判断(因为如果一个节点如果只有左子树或者右子树,我们不能取它左右子树中小的作为深度,因为那样会是0,我们只有在叶原创 2016-06-02 14:45:30 · 321 阅读 · 0 评论 -
回溯法(一)
回溯法1、有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。2、回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。3、回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含(剪枝过转载 2016-07-01 17:26:49 · 520 阅读 · 0 评论 -
先进先出缓存算法(FIFO)--java实现
题目操作系统中的虚拟内存管理系统可采用先进先出算法的方式缓存。当请求的内存页不在缓存中。且缓存已满时,应从缓存中删除保存时间最长的页面,从而为请求页面腾出空间,如果缓存未满,可直接将请求页面添加到缓存中,给定的页面最多只应在缓存中出现一次。构造FIFO类的构造方法为countCacheMiss。该方法输入包括一个整数max_cache_size,和一个页面请求数组p原创 2016-07-13 21:48:25 · 11243 阅读 · 1 评论 -
基于Mahout的电影推荐系统
1 Mahout介绍Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚类、分类、协同过滤、进化编程等等,并且,在 Mahout 中还加入了对Apache Hadoop的支持,使这些算法可以更高效的运行在云计算环境中。转载 2017-03-18 11:28:44 · 9632 阅读 · 1 评论 -
求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
前言:做过leetcode的人都知道, 里面有2sum, 3sum(closest), 4sum等问题, 这些也是面试里面经典的问题, 考察是否能够合理利用排序这个性质, 一步一步得到高效的算法. 经过总结, 本人觉得这些问题都可以使用一个通用的K sum求和问题加以概括消化, 这里我们先直接给出K Sum的问题描述和算法(递归解法), 然后将这个一般性的方法套用到具体的K, 比如leet转载 2016-08-15 11:24:17 · 584 阅读 · 1 评论 -
幸运数字 4和7
题目描述4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字。前几个幸运数字为:4,7,44,47,74,77,444,447... 现在输入一个数字K,输出第K个幸运数。输入第一行一个数字T(T输出每组数据输出一行,第K个幸运数。样例输入351001000000000样例输出原创 2016-09-05 21:31:01 · 12469 阅读 · 2 评论 -
动态规划-金额为Sum的所有纸(硬)币组合
问题给定一个数值sum,假设我们有m种不同类型的硬币{V1, V2, ..., Vm},如果要组合成sum,求所有可能的组合数。经典面试题[华为面试题] 1分2分5分的硬币三种,组合成1角,共有多少种组合?[创新工厂笔试题] 有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,有多少中组合可以组成n分钱?原创 2016-09-17 22:03:31 · 6328 阅读 · 1 评论 -
生成高度最小的二叉查找树--CreatMinimalBST
题目代码public class CreatMinimalBST { /** * */ public static TreeNode creatMinimalBST(int arr[]) { if (arr == null || arr.length == 0) { return null; } int start = 0; int end =原创 2016-09-03 16:40:04 · 926 阅读 · 0 评论 -
bfs/dfs的应用--countComponents
题目你是自己所在州交通部门的首席技术专家。有许多城市通过公路网络连通,即交通可以沿任一方向流动。一些“城市组”可能会与其他断开,形成集群。一个集群是一组彼此间连通且与其他部分相断开的城市组。假设一条路最多可连接两个给定的城市。给定这样一个城市和公路网络,求内部连通城市集群总数。类Count_Components的方法countComponents的输入包括一个二维网络,且在第i个城原创 2016-09-01 15:32:21 · 468 阅读 · 0 评论 -
Summary for LeetCode 2Sum, 3Sum, 4Sum, K Sum
Summary for LeetCode 2Sum, 3Sum, 4Sum, K SumOverviewI summarize various solutions (sort, hash, etc) for the leetcode 2Sum, 3Sum, 4Sum problems as well as how to optimize and some important r转载 2016-08-17 11:19:04 · 615 阅读 · 0 评论 -
快速排序 优化 详细分析
看了编程珠玑Programming Perls第11章关于快速排序的讨论,发现自己长年用库函数,已经忘了快排怎么写。于是整理下思路和资料,把至今所了解的快排的方方面面记录与此。 纲要算法描述时间复杂度分析具体实现细节划分选取枢纽元固定位置随机选取三数取中分割单向扫描双向扫描Hoare的双向扫描改进的双向扫描双向扫描的其他问题分治转载 2016-08-05 10:49:33 · 535 阅读 · 0 评论 -
快速排序及优化
quicksort可以说是应用最广泛的排序算法之一,它的基本思想是分治法,选择一个pivot(中轴点),将小于pivot放在左边,将大于pivot放在右边,针对左右两个子序列重复此过程,直到序列为空或者只有一个元素。这篇blog主要目的是关注quicksort可能的改进方法,并对这些改进方法做评测。其目的是为了理解Arrays.sort(int [ ]a)的实现。实现本转载 2016-08-05 10:47:27 · 367 阅读 · 0 评论 -
最近最少使用(LRU)算法模拟--LeastRecentPage
题目最近最少使用(LRU)缓存算法从缓存中收回最近最少使用元素(当缓存满时)。当缓存请求元素后,应将元素添加到缓存(如果之前不再缓存中),并将其作为缓存中最近使用最多的元素。给高速缓存的最大容量和一个整数(向缓存发出请求),请使用LRU高速缓存算法计算高速缓存请求失败的次数。当请求的整数不在高速缓存中时,说明高速缓存请求失败。初始状态下告诉缓存是空的。编写程序模拟LRU的运行过原创 2016-07-04 17:25:59 · 2981 阅读 · 0 评论 -
动态规划常见题目汇总
动态规划(Dynamic Programming,简称DP),虽然抽象后进行求解的思路并不复杂,但具体的形式千差万别,找出问题的子结构以及通过子结构重新构造最优解的过程很难统一,并不像回溯法具有解决绝大多数问题的银弹(全面解析回溯法:算法框架与问题求解)。为了解决动态规划问题,只能靠多练习、多思考了。本文主要是对一些常见的动态规划题目的收集,希望能有所帮助。难度评级受个人主观影响较大,仅供参考。转载 2016-04-24 09:41:06 · 752 阅读 · 0 评论 -
10G整数文件中寻找中位数
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。 分析: 既然要找中位数,很简单就是排序的想法。那么基于字节的桶排序是一个可行的方法 (请见《桶排序》):思想:将整形的每1byte作为一个关键字,也就是说一个整形可以转载 2016-04-15 10:00:44 · 1193 阅读 · 0 评论 -
桶排序
《基于比较的排序结构总结 》中我们知道:全依赖“比较”操作的排序算法时间复杂度的一个下界O(N*logN)。但确实存在更快的算法。这些算法并不是不用“比较”操作,也不是想办法将比较操作的次数减少到 logN。而是利用对待排数据的某些限定性假设 ,来避免绝大多数的“比较”操作。桶排序就是这样的原理。 桶排序的基本思想 假设有一组长度为N的待排关键字序列K[1...转载 2016-04-15 10:20:40 · 318 阅读 · 0 评论 -
位图排序
位图法就是bitmap的缩写,所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。位图法定义编辑例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示。那么就可以开一个int数组,一个int有32个位,就可以表示32个人。操作的时候可以使用位操作。位图法应用原创 2016-04-14 22:27:55 · 517 阅读 · 0 评论 -
java实现格雷码生成
什么是格雷码? 下面一段来自百度百科: 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实原创 2016-03-30 10:14:13 · 2879 阅读 · 0 评论 -
二叉树的还原恢复
二叉树的三种遍历常用于恢复:先序,中序,后序。1.对于先+中,后+中这两种组合,对任意二叉树的恢复都有唯一解,2.但对先+后的情况则不是,这种情况下要满足要求:对所有非叶节点,其两个子节点都存在,也即,一个节点要么是叶节点,要么有两个节点。典型的恢复方法是递归建构节点的左,右子树。一个一个看:假设二叉树原型如下转载 2016-03-28 15:53:11 · 1233 阅读 · 0 评论 -
Java词频统计算法(使用单词树)
许多英语培训机构(如新东方)都会出几本“高频词汇”的书,主要内容是统计近几年来各类外语考试中屡次出现的高频词汇,帮助考生减少需要背的生词的数量。但这些高频是如何被统计出来的呢?显然不会用手工去计算。假如我们已经将一篇文章存在一字符串(String)对象中,为了统计词汇出现频率,最简单直接的做法是另外建一个Map:key是单词,value是 次数。将文章从头读到尾,读到一个单词就到M原创 2016-03-27 18:14:13 · 5640 阅读 · 4 评论 -
程序员必须知道的十大基础实用算法及其讲解
算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divideandconquer)策略来把一个串转载 2016-03-14 17:21:08 · 515 阅读 · 0 评论 -
基于比较的内部排序总结
★ 基于“比较”操作的内部排序性能大PK 我们首先总结一下《排序结构专题1-4》中的十种方法的性能((N个关键字的待排序列)):排序方法 平均时间 最坏时间 辅助存储空间 稳定性 直接插入排序O(N^2) O(N^2) O(1) √转载 2016-04-15 10:52:08 · 601 阅读 · 0 评论 -
Java中split的用法
简介Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组。下面是string.split的用法实例及注意事项:java.lang.string.split split方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回。stringObj.split([separator,[limit]]) stringObj 必原创 2016-04-20 16:33:33 · 2996 阅读 · 0 评论 -
求数组中的逆序对数(inversion pair)
设A[1..n]是一个包含N个非负整数的数组。如果在iA[j],则(i,j)就称为A中的一个逆序对(inversion)。a)列出数组[2,3,8,6,1]的5个逆序。b)如果数组的元素取自集合{1,2,...,n},那么,怎样的数组含有最多的逆序对?它包含多少个逆序对?c)插入排序的运行时间与输入数组中逆序对的数量之间有怎样的关系?说明你的理由。d)给出一个算法,它能用O(nlo原创 2016-05-27 10:16:03 · 2555 阅读 · 0 评论 -
动态规划--最小路径和(Minimum Path Sum)
原题 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 down or原创 2016-04-18 14:52:57 · 912 阅读 · 0 评论 -
skiplist 跳表详解及其编程实现
skiplist介绍跳表(skip List)是一种随机化的数据结构,基于并联的链表,实现简单,插入、删除、查找的复杂度均为O(logN)。跳表的具体定义,请参考参考维基百科 点我,中文版。跳表是由William Pugh发明的,这位确实是个大牛,搞出一些很不错的东西。简单说来跳表也是链表的一种,只不过它在链表的基础上增加了跳跃功能,正是这个跳跃的功能,使得在查找元素时,跳表能够提转载 2016-04-18 10:38:59 · 498 阅读 · 0 评论 -
LeetCode[258]——Add Digits
Description:Given a non-negative integernum, repeatedly add all its digits until the result has only one digit.For example:Givennum =38, the process is like:3 + 8 = 11,1 + 1 = 2. Since2has...原创 2016-03-22 13:32:37 · 353 阅读 · 0 评论