java经典算法题50道

原文JAVA经典算法50题【程序1】  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....具体分析如下:f(1)=1(第1个月有一对兔子)f(2)=1(第2个月还是一对兔子)f(3)=2(原来有一对兔子,第3个开始,每个月生一对兔子)f(4)=3(原来有两对兔子,有一对可以生育)f(5)=5(原来有3对兔子,第3个月出生的那对兔子也可以生育了,那么现在有两对兔子可以生育)f(6)=8(原来有5对兔子,第4个月出生的那对兔子也可以生育了,那么现在有3对兔子可以生育)..............由以上可以看出,第n个月兔子的对数为f(n)=f(n-1)+f(n-2);f(n-1)是上个月的兔子数量,是原来有的。f(n-2)是可以生育的兔子数,即多出来的数量。第n-2个月开始后的第3个月是第n个月,此时第n-2个月时的兔子都可以生育了。publicclassDemo01{   ...
代码星球 代码星球·2021-02-12

使用位图算法来优化签到历史存储空间占用

实际开发中有这样的场景,用户每日签到,可获取相对应的积分赠送,如果连续签到,则可获得额外的积分赠送。本文主要讲解使用位图算法来优化签到历史记录的空间占用。当然如果业务中仅仅是获取连续签到的最大天数,使用一个计数器即可记录。 需求:1.记录一年的签到历史2.获取某月的签到历史3.获取过去几天连续签到的最大天数 位图算法实现思路一天的签到状态只有两种,签到和未签到。如果使用一个字节来表示,就需要最多366个字节。如果只用一位来表示仅需要46(366/8=45.75)个字节。位图算法最关键的地方在于定位。也就是说数组中的第nbit表示的是哪一天。给出第n天,如何查找到第n天的bit位置。 这里使用除法和求余来定位。比如上图第1天,index=1/8= 0,offset=1%8=1,也就是第0个数组的第1个位置(从0开始算起)。第11天,index=11/8= 1,offset=11%8=3,也就是第1个数组的第3个位置(从0开始算起)。byte[]decodeResult=signHistoryToByte(signHistory);//in...

ZooKeeper是以Fast Paxos算法为基础的

ZooKeeper是以FastPaxos算法为基础的,Paxos算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而FastPaxos作了一些优化,通过选举产生一个leader(领导者),只有leader才能提交proposer,具体算法可见FastPaxos。因此,要想弄懂ZooKeeper首先得对FastPaxos有所了解。 [3] ZooKeeper的基本运转流程:1、选举Leader。2、同步数据。3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。4、Leader要具有最高的执行ID,类似root权限。5、集群中大多数的机器得到响应并接受选出的Leader...

Ribbon,主要提供客户侧的软件负载均衡算法

Ribbon,主要提供客户侧的软件负载均衡算法。Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略:简单轮询负载均衡加权响应时间负载均衡区域感知轮询负载均衡随机负载均衡Ribbon中还包括以下功能:易于与服务发现组件(比如Netflix的Eureka)集成使用Archaius完成运行时配置使用JMX暴露运维指标,使用Servo发布多种可插拔的序列化选择异步和批处理操作(即将推出)自动SLA框架(即将推出)系统管理/指标控制台(即将推出)...

电商SKU全排列算法

letnames=["iphoneX","iphoneXS"];letcolors=["黑色","白色"];letstorages=["64g","256g"];letcombine=function(...chunks){letres=[]lethelper=function(chunkIndex,prev){letchunk=chunks[chunkIndex];letisLast=chunkIndex===chunks.length-1for(letvalofchunk){letcur=prev.concat(val)if(isLast){res.push(cur)}else{helper(chunkIndex+1,cur)}}}helper(0,[])returnres;}console.log(combine(names,colors,storages)); ...
代码星球 代码星球·2021-02-11

js算法及数据结构——队列封装

//Method--方法:和某一个对象实例有联系//function--函数//封装队列functionQueue(){//属性this.items=[]//方法//1.将元素加入到队列Queue.prototype.enqueue=(element)=>{this.items.push(element);}//2.从队列中删除前端元素Queue.prototype.dequeue=()=>{returnthis.items.shift();}//3.查看前端的元素Queue.prototype.front=()=>{returnthis.items[0];}//4.查看队列是否为空Queue.prototype.isEmpty=()=>{returnthis.items.length==0;}//5.查看队列中的元素个数Queue.prototype.size=()=>{returnthis.items.length;}//6.toString方法Queue.prototype.toString=()=>{letgetString="";for(l...

js数据结构算法——封装简单栈

//Method--方法:和某一个对象实例有联系//function--函数//封装栈类functionStack(){//栈的属性this.items=[]//栈的向光操作//1.将元素压入栈内//this.push=function(){}//此方式相当于给某个对象实例添加方法(每个实例都添加,占用了内存)Stack.prototype.push=function(element){//此方法相当于给整个类添加方法(更节省内存/更高效)this.items.push(element);}//2.从栈中取出元素Stack.prototype.pop=function(){returnthis.items.pop();}//3.查看一下栈顶元素Stack.prototype.peek=()=>{returnthis.items[this.items.length-1];}//4.判断栈是否为空Stack.prototype.isEmpty=()=>{returnthis.items.length==0;}//5.获取栈中元素的长度Stack.prototype.size=(...

多文本匹配 AC算法(Aho-Corasick)

https://www.jianshu.com/p/e7f5766f3735...

Twitter的雪花算法(snowflake)自增ID

前言  这个问题源自于,我想找一个分布式下的ID生成器。  这个最简单的方案是,数据库自增ID。为啥不用咧?有这么几点原因,一是,会依赖于数据库的具体实现,比如,mysql有自增,oracle没有,得用序列,mongo似乎也没有他自己有个什么ID,sqlserver貌似有自增等等,有些不稳定因素,因为ID生成是业务的核心基础。当然,还有就是性能,自增ID是连续的,它就依赖于数据库自身的锁,所以数据库就有瓶颈。当然了,多台数据库加某种间隔也是可用的,但是,运维维护会很复杂,因为它不是内聚的解决方案。而且,很难提前获得下一个ID。  后来,我用过一段时间在数据库表里进行记录来进行自增。这个的优势是,我可以提前获得下一个ID,而且,某个进程里可以一次获取一批,减少锁的依赖,虽然进程间的不重复依然是基于数据库事务隔离的,但是,依赖小了,瓶颈小了。这个方案其实挺好的,我依然也会继续用,主要是,它可以生成数字字母混合的编剧号,而且基本可控。但是,我数据库主键为了效率和空间成本,基本会选用long,基本顺序生成就可以了,所以,使用这种带持久化的方案,会显得很重。起项目的时候,也是,需要先建立对应的表...

轻松看懂机器学习常用算法

https://blog.csdn.net/guleileo/article/details/81117230...

JavaScript算法实现排序

<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>IFEJavaScriptTask01</title></head><body><h3>污染城市列表</h3><ulid="aqi-list"><!--<li>第一名:福州(样例),10</li><li>第二名:福州(样例),10</li>--></ul><scripttype="text/javascript">varapiDate=[["北京",90],["上海",50],["福州",10],["广州",50],["成都",90],["西安",100]];varj=0,i;while(j<5){i=j+1;while(i<6){if(apiDate[j][1]<apiDate[i][1]){vartemp=apiDate[j];apiDate[j...

代码练习(二维数组的定义,字符串加减,子元素的创建及绑定,排序算法

<!DOCTYPE><html><head><metacharset="utf-8"><title>IFEJavaScriptTask01</title></head><body><ulid="source"><li>北京空气质量:<b>90</b></li><li>上海空气质量:<b>70</b></li><li>天津空气质量:<b>80</b></li><li>广州空气质量:<b>50</b></li><li>深圳空气质量:<b>40</b></li><li>福州空气质量:<b>32</b></li><li>成都空气质量:<b>90</b></li&g...

算法笔记_001:斐波那契数的多种解法(Java)

本篇文章解决的问题来源于算法设计与分析课程的课堂作业,主要是运用多种方法来计算斐波那契数。具体问题及解法如下:问题描述:利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数是第几个斐波那契数。(Java:231-1forint,263-1forlong)解决方案:针对问题1,此处要使用迭代法来解决,具体实现代码如下://用迭代法寻找编程环境支持的最大整数(int型)的斐波那契数是第几个斐波那契数publicstaticintmax_int_iteration(){inta=1,b=1,c=2;intcount=3;for(;b<c;){//一旦c达到编程环境最大斐波那契数,便会产生内存溢出,从而变成一个负数,到此循环结束a=b;b=c;c=a+b;count++;}returncount;}//用迭代法寻找编程环境支持的最大整数(long型)的斐波那契数是第几个斐波那契数publicstaticlongmax_long_iteration(){longa=1,b=1,c=2;longcount=3;for(;b<c;){//一旦c达到编程环境最大斐波那契数,便会产生...

算法笔记_002:最近点对问题

问题描述: 给定某空间中(直线空间或平面空间)n个点,请找出它们中的最近点对。你需要完成下列任务: 1、随机产生或手工输入n个点的坐标。 2、输出最近的两个点的坐标。 3、算法尽可能效率高。解决方案: 针对问题,主要包括两个方面的问题,一是在直线空间求最近点对,二是在平面空间求最近点对。具体解决办法如下:(1)直线空间求最近点对问题求最近点对如果直接用蛮力法,即有n个点,从第一个点开始依次算出两点直接的距离,进行大小比较,求出最小值,其时间效率为O(n^2)。那有没有效率更高一点的办法呢?结果当然是有的,那就是采用迭代法(时间效率为O(n*logn),先找出一组点中的中间点,使得在中间点左边的x坐标小于中间点x坐标,中间点右边的x坐标大于中间点x坐标,分成左右两组,用第一组左边组X最大值与右边组X最小值相减即得当前最短距离,在依次迭代,最后递归合并求出最终最短距离。分治法方案具体代码如下:packagecom.liuzhen.ex_two;publicclassClosestPionts{//初始化一个随机数组publicstatici...
代码星球 代码星球·2021-02-09

算法笔记_003:矩阵相乘问题【分治法】

/目录1问题描述 1.1实验题目 1.2实验目的 1.3实验要求 2解决方案 2.1分治法原理简述 2.2分治法求解矩阵相乘原理 2.3具体实现源码 2.4运算结果截图      设M1和M2是两个n×n的矩阵,设计算法计算M1×M2的乘积。   (1)提高应用蛮力法设计算法的技能;  (2)深刻理解并掌握分治法的设计思想;  (3)理解这样一个观点:用蛮力法设计的算法,一般来说,经过适度的努力后,都可以对其进行改进,以提高算法的效率。   (1)设计并实现用BF(Brute-Force,即蛮力法)方法求解矩阵相乘问题算法;  (2)设计并实现用DAC(Divide-And-Conquer,即分治法)方法求解矩阵相乘问题算法;  (3)以上两种算法的输入既可以手动输入,也可以自动生成...
首页上一页...89101112...下一页尾页