首页
学习
活动
专区
圈层
工具
发布

Java经典问题算法大全

/【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?.../ /* 算法: 定义一个变量b, 赋初值为0;定义一变量sum, 赋初值为0, 进入循环后,将a + b 的值赋给b,将sum + b 的值赋给sum; 同时,将a 增加十倍, ++ i; 继续循环...说明: 这个算法实现虽然实现了这个功能,但不健壮,当输入字符是,会出现异常。...C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构。...Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。

56500

Java经典问题算法大全

/【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?.../ /* 算法: 定义一个变量b, 赋初值为0;定义一变量sum, 赋初值为0, 进入循环后,将a + b 的值赋给b,将sum + b 的值赋给sum; 同时,将a 增加十倍, ++ i; 继续循环...说明: 这个算法实现虽然实现了这个功能,但不健壮,当输入字符是,会出现异常。...C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构。...Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。

47700
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    回溯算法解数独问题(java版)

    下面来详细讲一下如何用回溯算法来解数独问题。     下图是一个数独题,也是号称世界上最难的数独。当然了,对于计算机程序来说,只要算法是对的,难不难就不知道了,反正计算机又不累。...回溯算法基本上就是穷举,解这种数独类的问题逻辑比较简单。 ? 不管算法懂不懂,先把类建出来,变量定义好,那放大学试卷上就是可以拿两分了。...下面要讲的就是该程序最关键的地方,也是比较难以理解的地方,就是对根节点的初始化。回溯算法讲究的是一条道走到黑,不撞南墙不回头,并且把所有的道都走完。    ...那么我们的做法是先第一步放0,发现没问题(符合只能放0和1的规则),然后走第二步,第二步如果走对了,那就直接走出去了,获得了一次正确的解(00)。...问题放大一下,有N步(N未知),第一步有1-9共9种情况,第一步放了1,后面还有未知的步,那无论后面成功与否,你肯定都要去试第一步放2-9之间的数字。

    1.7K30

    回溯算法解迷宫问题(java版)

    以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计程序,对任意设定的迷宫,求出从入口到出口的所有通路。     下面我们来详细讲一下迷宫问题的回溯算法。 ?    ...该图是一个迷宫的图。1代表是墙不能走,0是可以走的路线。只能往上下左右走,直到从左上角到右下角出口。    ...做法是用一个二维数组来定义迷宫的初始状态,然后从左上角开始,不停的去试探所有可行的路线,碰到1就结束本次路径,然后探索其他的方向,当然我们要标记一下已经走的路线,不能反复的在两个可行的格子之间来回走。...,放开注释就能看到所有走的路径。    ...后来仔细看看,果然是有8条路径……     打印结果如下,5是用来标记路径的: 1458551044499 得到一个解: 5 5 1 0 0 0 1 0 5 5 1 0 0 0 1 0 5 0 1

    2K40

    回溯算法解八皇后问题(java版)

    八皇后问题是学习回溯算法时不得不提的一个问题,用回溯算法解决该问题逻辑比较简单。     下面用java版的回溯算法来解决八皇后问题。     ...八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。...该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 ?      ...第一个皇后先放第一行第一列,然后第二个皇后放在第二行第一列、然后判断是否OK,然后第二列、第三列、依次把所有列都放完,找到一个合适,继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲突的位置...print(); return; } //从第一列开始放值,然后判断是否和本行本列本斜线有冲突,如果OK,就进入下一行的逻辑

    2.3K50

    【Java数据结构和算法】010-递归:迷宫问题、八皇后问题(回溯算法)

    递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。...1、额递能解决什么问题 各种数学问题如:8皇后问题、汉诺塔、阶乘问题、迷宫问题、球和篮子的问题(google编程大赛); 各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等; 将用栈解决的问题...四、八皇后问题 1、问题描述 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。...说明: 理论上应该创建一个二维数组来表示棋盘,但是实际上可以通过算法,用一个一维数组即可解决问题. arr[8] = {0 , 4, 7, 5, 2, 6, 1, 3} //对应arr 下标 表示第几行...,即第几个皇后,arr[i] = val , val 表示第i+1个皇后,放在第i+1行的第val+1列; 3、代码实现 package com.zb.ds; //递归:八皇后问题(回溯算法) public

    20210

    贪心算法最优装载问题(Java代码实现)

    最优装载问题 最优装载问题实质上就是一个简单版的0-1背包问题 问题描述 有一批集装箱要装上一艘载重量为 c 的轮船,其中集装箱 i 的重量为 wi 最优装载问题要求确定在装载体积不受限制的情况下...,将尽可能多的集装箱装上轮船 算法描述 可用贪心算法求解/* * 若尘 */ package loading; import java.util.Arrays; /** * 最优装载问题(贪心算法...public class LoadingProblem { private static int[] x; /\*\* \* \* @param c 总重量 \* @param w 每个集装箱的重量...if (this.w == o.w) return 0; else return 1; } } }最优值为: 10.0 最优解为: 1, 1, 0, 1, 1 采用重量最轻者先装的贪心选择策略...,可产生最优装载问题的最优解Java 源代码代码有详细注释,不懂评论下方留言

    1.4K117

    snowflake算法的workerId问题

    根据这个思路,有很多语言版本的实现,下面是java版本: public class SnowFlake { /** * 起始的时间戳 */ private final...现在很多项目都是跑在云上(或k8s集群中),分布式环境中容器出现问题被重启是不可避免的,而且机器重启后通常ip也会变化。...隐患就在于上面提到的ip取模算法,先给出ip转换成int的方法(网上copy来的): public class IpUtils { // 将127.0.0.1形式的IP地址转换成十进制整数,这里没有进行任何错误处理...,所以它俩在并发高的情况下,有就较大概率生成相同的id,而且这个bug还挺难查的,可能机器一重启,又正常了(因为ip变了),如果只是偶尔出现,还会让人误以为是“时钟回拨”问题。...) 最后,顺便提一句,如果考虑到时钟回拨问题,可以使用一些大厂的改进版本,比如百度的uid-generator ,或美团的leaf

    5.6K21

    【狂热算法篇】解锁筛法密码:埃氏筛与线性筛(欧拉筛)的深度剖析

    本篇简介: 对于素数的筛选法进行优化而得出的埃氏筛,线性筛的引入,一些细节处理,如为什么这么设计,好处在哪等一系列问题的解释,最后设计出代码;以及例题示例。...1.1定义: 埃氏筛(埃拉托斯特尼筛法)是一种古老且简单高效的用于筛选出一定范围内所有素数的算法。它是由古希腊数学家埃拉托斯特尼(Eratosthenes)提出的。...二·线性筛(欧拉筛) : 这里就是上面的埃氏筛提前结束重复筛选(保证最小质因子筛除)的过程,就不演示了。 2.1定义: 线性筛,也叫欧拉筛,是一种用于筛选素数的算法。...2.3算法代码实现: 这里其实就是埃氏筛代码加了判断重复的优化: 这里也许会说为什么if的这个判断条件要加在标记合数操作之后,因为当发现i和primer[j]成倍数时;此时的primer[j]*i得到的...四·设计时的细节问题: 4.1为什么要把埃氏筛优化成线性筛: 也就是为什么我们要有这行代码? 我们的目的是用最小质因数筛除来达到最终目的的。

    55800

    Java的递归算法

    (先定义一个比较简单的说法,为了理解,不一定对) 递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。...对刚开始接触计算机编程的人而言,这里有递归的一个简单定义:当函数直接或者间接调用自己时,则发生了递归。 递归是一种常见的解决问题的方法,寄把问题逐渐简单化。...递归的基本思想就是“自己调用自己”,一个使用递归技术的方法会直接或间接的调用自己 递归构造包括两个部分: 定义递归头。什么时候不调用自身方法,如果没有头,将陷入死循环 递归体。...其实递归算法很简单,简单点就是自己调用自己的方法,有条件判断什么时候停止! 递归的经典示例 计算阶乘是递归程序设计的一个经典示例。计算某个数的阶乘就是用那个数去乘包括 1 在内的所有比它小的数。...阶乘的一个有趣特性是,某个数的阶乘等于起始数(starting number)乘以比它小一的数的阶乘。例如,factorial(5) 与 5 * factorial(4) 相同。

    70520

    探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式

    本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。...一、雪花算法原理雪花算法由Twitter开源,其核心思想是通过一定的位运算,将时间戳、机器ID和序列号组合成一个64位的长整型ID。...结构图如下:复制代码| 1 位符号位 | 41 位时间戳 | 10 位机器ID | 12 位序列号 |二、时钟回拨问题时钟回拨是指系统时钟由于某种原因(如人为调整、NTP同步错误等)突然倒退,这可能导致雪花算法生成的...三、Java实现雪花算法以下是雪花算法的Java实现,包括处理时钟回拨的逻辑:java复制代码public class SnowflakeIdGenerator { // 起始时间戳(2020-01-...五、总结雪花算法通过时间戳、机器ID和序列号的组合,在分布式环境下生成全局唯一的64位ID。本文介绍了雪花算法的原理、处理了时钟回拨问题的策略,并提供了Java实现。

    1.1K21

    java 算法中常见的问题总结1(代码实现,不包含逻辑)

    中进制的转换 参考地址:   http://blog.csdn.net/swandragon/article/details/4926457 API上面的 Integer类中的方法 java中删除数组中的某个元素...参考地址:http://www.cnblogs.com/hanfeihanfei/p/6146077.html import java.util.Arrays; import java.util.Scanner...:  1.java中的Calendar类的用法 例:计算当前时间是星期几 import java.util.Calendar; import java.util.Scanner; public class...,尽量使用equals方法判断,不要单单使用 == 这样有时候会出现问题 binarySearch :参考 http://blog.csdn.net/a1b2c3d4123456/article/details.../51097161 此法为二分搜索法,故查询前需要用sort()方法将数组排序,如果数组没有排序,则结果是不确定的,另外 如果数组中含有多个指定值的元素,则无法保证找到的是哪一个。

    1.1K30

    Java的ClassPath问题

    在文章《Spark Submit的ClassPath问题》中,我探讨了针对spark-submit的Jar包,如何指定外部依赖的Jar包。同样的问题在本地部署时仍然存在。...Jar包,而在该Jar包中Java类,回去调用一个第三方的jar包,且jar包并没有被放到mort.jar包中。...通过查看java命令的帮助文档,我最初以为通过设置-classpath参数来指定外部依赖包就可以轻松解决。然而事情的发展并非我所愿,运行时仍然报告找不到第三方Jar包中相关类的错误。...查阅文档,发现: 当使用-jar参数运行的时候,java VM会屏蔽所有的外部classpath,而只以本身yourJar.jar的内部class作为类的寻找范围。...资料还提到可以将要依赖的第三方jar包放在JVM的扩展class路径下,即{java_home}\jre\lib\ext目录下。一旦设置正确,就无需修改任何配置文件了。

    1.6K70

    动态规划算法java代码_动态规划算法解决背包问题

    动态规划的基本概念 动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。 动态规划算法通常用于求解具有某种最优性质的问题。...在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。...一个问题满足最优化原理又称其具有最优子结构性质 无后效性 将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。...换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性 子问题的重叠性 动态规划算法的关键在于解决冗余,这是动态规划算法的根本目的。...,第二提交是递归算法,就代码来说递归看起来是简单很多,但是执行用时,动态规划的算法是要快很多的。

    42710

    背包问题的遗传算法

    MATLAB爱爱爱好者 1 引言 往期二狗已经对遗传算法和背包问题的模拟退火算法进行了介绍,即使是初学者也能对GA,Knapsack,和SA有一些认识。...今天我们将会带领大家进一步、更细节地实现遗传算法的背包问题求解,从另一个角度思考这个经典问题并比较两种启发式算法的不同。...细心的你可能已经发现了,无论是GA还是SA都用到了轮盘赌这个“进化之神”,所以这两种算法的解并不是固定的。之前的读者留言也有提到这个问题。 ?...背包问题是运筹学比较常见的部分,在很多规划问题中都会涉及。一般提法是:一位旅行者携带背包去登山,已知他所能承受的背包重量限度,n种物品的单件重量及其价值。...旅行者应如何选择携带各种物品的件数,以使总价值最大?实际的问题中,如航空航天的装载,投资组合的购买,规划领域铁路渠送车调度等等都可以借鉴背包问题的解法。

    1.7K10

    干货 | Branch and Price算法求解VRPTW问题(附JAVA代码分享)

    ESPPRC-Label Setting:求解VRPTW的子问题(pricing problem),标号法求解。 算法的运行效果如下: ? 算例用的是标准Solomon25。...干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇 2. 干货 | 10分钟搞懂branch and bound算法的代码实现附带java代码 3....干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题 4. cplex教学 | 分支定界法(branch and bound)解带时间窗的车辆路径规划问题(附代码及详细注释...干货 | 10分钟带你彻底了解Column Generation(列生成)算法的原理附java代码 2. 运筹学教学|列生成(Column Generation)算法(附代码及详细注释) 3....干货 | 求解VRPTW松弛模型的Column Generation算法的JAVA代码分享 ESPPRC 1. 干货 | VRPTW子问题ESPPRC的介绍及其求解算法的C++代码 2.

    2.2K40
    领券