- 浏览: 604175 次
- 来自: ...
文章分类
最新评论
-
lgh1992314:
相同的元素呢
一种离散化方法 -
HelloSummerR:
圆心的位置是随机的,于是圆的部分会落到canvas外,那样就显 ...
HTML5 Canvas学习笔记(1)处理鼠标事件 -
hlstudio:
好久没见到sokuban了,这有个java版的,带源码,可以参 ...
求推箱子的最小步数(java) -
肖泽文:
太好了,谢谢你。。有中文注释!
HTML5 推箱子游戏过关演示动画 -
swm8023:
删除操作,将最后一个叶子节点插入后也有可能上浮吧
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
1.判断闰年与日、月、年是否有效的函数
四年一闰;百年不闰;四百年再闰。
static boolean isValidDate(int d, int m, int y) {
if (d < 1 || m < 1 || m > 12) return false;
if (m == 2) {
if (isLeapYear(y)) return d <= 29;
else return d <= 28;
}
else if (m == 4 || m == 6 || m == 9 || m == 11)
return d <= 30;
else
return d <= 31;
}
static boolean isLeapYear(int year) {
return (year%4 == 0 && year%100 !=0) || (year%400 == 0);
}
2.如何判断一个数是否是质数(Prime Number)?
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
定理: 如果n不是素数, 则n有满足1< d<=sqrt(n)的一个因子d.
证明: 如果n不是素数, 则由定义n有一个因子d满足1< d< n.
如果d大于sqrt(n), 则n/d是满足1< n/d<=sqrt(n)的一个因子.
public boolean isPrime(int n)
{
if(n < 2) return false;
if(n == 2) return true;
if(n%2==0) return false;
for(int i = 3; i*i <= n; i += 2)
if(n%i == 0) return false;
return true;
}
时间复杂度O(Math.sqrt(n)/2),
3.分解质因数(Decomposition of prime factors)。
每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分解质因数只针对合数。
求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。 短除法求质因数:
public Integer[] decPrime(int n) {
List<Integer> list = new ArrayList<Integer>();
for (int i=2;i <= n;i++){
while(n != i){
if(n%i != 0){
break;//不能整除肯定不是因数,
//都被除完之后。剩下的因数只能是奇数,且是质数。
}
list.add(Integer.valueOf(i));
n = n/i;
}
}
list.add(Integer.valueOf(n));
return list.toArray(new Integer[list.size()]);
}
4.求两个数的最大公约数(Greatest Common Divisor)。
如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。
公约数中最大的一个公约数,称为这几个自然数的最大公约数。
早在公元前300年左右,欧几里得就在他的著作《几何原本》中给出了高效的解法——辗转相除法。辗转相除法使用到的原理很聪明也很简单,假设用f(x, y)表示x,y的最大公约数,取k = x/y,b = x%y,则x = ky + b,如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x, y)= f(y, x%y)(y > 0),如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。
long gcd(long x,long y) {
if(x < y) {
long m = x;
x = y;//x存储较大的一个数
y = m;
}
long k = 0;
while(y != 0) {
k = x%y;
x = y;
y = k;
}
return x;
}
5.求两个数的最小公倍数数(Least Common Multiple)。
几个数公有的倍数叫做这几个数的公倍数,其中最小的一个公倍数,叫做这几个数的最小公倍数。自然数a、b的最小公倍数可以记作[a,b],
自然数a、b的最大公约数可以记作(a,b),当(a,b)=1时,[a,b]= a*b。
两个数的最大公约数和最小公倍数有着下列关系:
最大公约数*最小公倍数=两数的乘积
即(a,b)*[a,b]= a*b 。
证明:设 a = x*(a,b),b = y*(a,b) 其中x,y不存在公约数。
a * b = [x * (a,b)] * [y * (a,b)]
= [x * y * (a,b)] * (a,b)
= [a,b] * (a,b)
long lcm(long x,long y) {
return x*y/gcd(x,y);
}
6、回文数字(Palindrome Number)。
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:121,323.....
判断一个数字是否是回文的方法如下:
boolean isPalindromeNumber(long l) {
char [] c = String.valueOf(l).toCharArray();
int len = c.length/2;
for (int i = 0; i < len; i++) {
if(c[i] != c[c.length-1-i]) {
return false;
}
}
return true;
}
7、牛顿迭代法求平方根(Newton's Method)。
/**
* 求平方根
* @param d 待开方数
* @param precision 算术平方根的精度
* @return
*/
double sqrt(double d,double precision) {
double x1 = d/2, x2 =(x1 + d/x1)/2;
while(Math.abs(x2 -x1)>precision) {
x1 = x2;
x2 =(x1 + d/x1)/2;
}
return x1;
}
7.奇偶数快速判断(odd even)。
判断奇数和偶数的方法,一般是除以2或者对2取模运算,结果为0则是偶数反之则是奇数。 在计算机内部数都是用二进制表示的,奇数最低位上一定是1,偶数为0。基于这个特点可以利用按位与运算进行奇偶数判断。
//如果是奇数返回true,否则是偶数 则返回false。
boolean isOdd(long l) {
if((l & 0x01) == 0) {
return false;
}
return true;
}
下载源码:
四年一闰;百年不闰;四百年再闰。
static boolean isValidDate(int d, int m, int y) {
if (d < 1 || m < 1 || m > 12) return false;
if (m == 2) {
if (isLeapYear(y)) return d <= 29;
else return d <= 28;
}
else if (m == 4 || m == 6 || m == 9 || m == 11)
return d <= 30;
else
return d <= 31;
}
static boolean isLeapYear(int year) {
return (year%4 == 0 && year%100 !=0) || (year%400 == 0);
}
2.如何判断一个数是否是质数(Prime Number)?
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
定理: 如果n不是素数, 则n有满足1< d<=sqrt(n)的一个因子d.
证明: 如果n不是素数, 则由定义n有一个因子d满足1< d< n.
如果d大于sqrt(n), 则n/d是满足1< n/d<=sqrt(n)的一个因子.
public boolean isPrime(int n)
{
if(n < 2) return false;
if(n == 2) return true;
if(n%2==0) return false;
for(int i = 3; i*i <= n; i += 2)
if(n%i == 0) return false;
return true;
}
时间复杂度O(Math.sqrt(n)/2),
3.分解质因数(Decomposition of prime factors)。
每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分解质因数只针对合数。
求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。 短除法求质因数:
public Integer[] decPrime(int n) {
List<Integer> list = new ArrayList<Integer>();
for (int i=2;i <= n;i++){
while(n != i){
if(n%i != 0){
break;//不能整除肯定不是因数,
//都被除完之后。剩下的因数只能是奇数,且是质数。
}
list.add(Integer.valueOf(i));
n = n/i;
}
}
list.add(Integer.valueOf(n));
return list.toArray(new Integer[list.size()]);
}
4.求两个数的最大公约数(Greatest Common Divisor)。
如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。
公约数中最大的一个公约数,称为这几个自然数的最大公约数。
早在公元前300年左右,欧几里得就在他的著作《几何原本》中给出了高效的解法——辗转相除法。辗转相除法使用到的原理很聪明也很简单,假设用f(x, y)表示x,y的最大公约数,取k = x/y,b = x%y,则x = ky + b,如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x, y)= f(y, x%y)(y > 0),如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。
long gcd(long x,long y) {
if(x < y) {
long m = x;
x = y;//x存储较大的一个数
y = m;
}
long k = 0;
while(y != 0) {
k = x%y;
x = y;
y = k;
}
return x;
}
5.求两个数的最小公倍数数(Least Common Multiple)。
几个数公有的倍数叫做这几个数的公倍数,其中最小的一个公倍数,叫做这几个数的最小公倍数。自然数a、b的最小公倍数可以记作[a,b],
自然数a、b的最大公约数可以记作(a,b),当(a,b)=1时,[a,b]= a*b。
两个数的最大公约数和最小公倍数有着下列关系:
最大公约数*最小公倍数=两数的乘积
即(a,b)*[a,b]= a*b 。
证明:设 a = x*(a,b),b = y*(a,b) 其中x,y不存在公约数。
a * b = [x * (a,b)] * [y * (a,b)]
= [x * y * (a,b)] * (a,b)
= [a,b] * (a,b)
long lcm(long x,long y) {
return x*y/gcd(x,y);
}
6、回文数字(Palindrome Number)。
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:121,323.....
判断一个数字是否是回文的方法如下:
boolean isPalindromeNumber(long l) {
char [] c = String.valueOf(l).toCharArray();
int len = c.length/2;
for (int i = 0; i < len; i++) {
if(c[i] != c[c.length-1-i]) {
return false;
}
}
return true;
}
7、牛顿迭代法求平方根(Newton's Method)。
/**
* 求平方根
* @param d 待开方数
* @param precision 算术平方根的精度
* @return
*/
double sqrt(double d,double precision) {
double x1 = d/2, x2 =(x1 + d/x1)/2;
while(Math.abs(x2 -x1)>precision) {
x1 = x2;
x2 =(x1 + d/x1)/2;
}
return x1;
}
7.奇偶数快速判断(odd even)。
判断奇数和偶数的方法,一般是除以2或者对2取模运算,结果为0则是偶数反之则是奇数。 在计算机内部数都是用二进制表示的,奇数最低位上一定是1,偶数为0。基于这个特点可以利用按位与运算进行奇偶数判断。
//如果是奇数返回true,否则是偶数 则返回false。
boolean isOdd(long l) {
if((l & 0x01) == 0) {
return false;
}
return true;
}
下载源码:
发表评论
-
龙抬头
2014-11-10 15:06 632... -
求推箱子的最小步数(java)
2014-05-06 08:32 3775题目(poj1475):推箱子,要求箱子移动步骤最小。如图:T ... -
田忌赛马: POJ 2287(贪心解法)
2013-01-03 19:24 3062POJ 2287问题描述: 你一定听过田忌赛马的故事吧? ... -
回溯法入门学习之二(九宫格与数独)
2012-11-11 08:53 3337回溯法的基本做法是搜索解空间,一种组织得井井有条的,能避 ... -
回溯法入门学习之一
2012-11-10 15:53 1847一: 回溯法 有时我们要得到问题的解,先从其中某一种情况 ... -
SPFA算法求单源最短路径
2012-11-04 23:00 1943很多时候,给定的图存在负权边,这时类似Dijkstra等算法 ... -
图解Bellman-Ford算法
2012-11-03 19:39 5941Bellman-Ford算法: ... -
并查集入门精讲,实例2个(JAVA)
2012-10-30 14:47 4070一、什么是并查集 ... -
深度优先搜索学习五例之五(JAVA)
2012-10-22 15:48 1247一、深度优先搜索遍历磁盘文件目录 import java.io ... -
深度优先搜索学习五例之四(JAVA)
2012-10-21 17:25 2028先继续“深度优先搜索学习五例之三”http://128k ... -
深度优先搜索学习五例之三(JAVA)
2012-10-20 20:43 2316一、深度优先搜索框架一递归实现,流程如下: ... -
深度优先搜索学习五例之二(JAVA)
2012-10-20 12:24 2269继续“深度优先搜索学习五例之一 ”中的第一例子:http:// ... -
深度优先搜索学习五例之一(JAVA)
2012-10-19 14:54 4983深度优先搜索DFS(Depth First Search) ( ... -
广度优先搜索学习五例之五
2012-10-17 21:11 1444如果已经知道搜索的开始状态和结束状态,要找一个满足某种条 ... -
广度优先搜索学习五例之四
2012-10-16 15:26 1166例:输出由数字0,1,2..n ... -
广度优先搜索学习五例之三
2012-10-14 19:19 1504广度优先搜索是以某一节点为出发点,先拜访所有相邻的节点。 ... -
广度优先搜索学习五例之一
2012-10-13 15:27 1674有两种常用的方法可用来搜索图:即深度优先搜索和广度优先搜 ... -
广度优先搜索学习五例之二(JAVA)
2012-10-12 14:32 2131再次强调: 图的广度优先搜索,要遵守以下规则: (0) 选取某 ... -
动态规划算法学习十例之十
2012-10-08 21:00 2279凸多边形最优三角剖分 一凸8边形P的顶点顺时针为{v1 ... -
动态规划算法学习十例之九
2012-10-07 15:50 1112最长单调递增子序列的长度问题 所谓子序列,就是在原序列里删 ...
相关推荐
Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的算法 Java中经典的...
在Java编程语言的浩瀚世界中,掌握一些经典的算法对于任何开发者来说都是一项宝贵的能力。这些算法不仅能够帮助我们解决特定的编程问题,而且能够锻炼我们的逻辑思维能力和编程技巧。通过研究和实现这些算法,我们...
Java 经典算法例子,Java 经典算法例子,Java 经典算法例子,Java 经典算法例子,Java 经典算法例子,Java 经典算法例子,Java 经典算法例子,Java 经典算法例子,Java 经典算法例子,Java 经典算法例子,Java 经典...
Description: Java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法java经典算法 Tags: Java经典算法 Java经典算法合集是Java编程语言中的一些经典算法的集合,这些算法涵盖了...
java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法大全源码java算法...
本文将围绕“java经典问题算法及源代码”这一资源,展开讨论Java算法实现的重要性及其实践方法。 首先,了解算法在编程中的重要性是每个Java程序员的必经之路。算法相当于编程的骨架,没有算法的支撑,复杂的逻辑和...
Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法...
在这个名为"AlgorithmGossip"的压缩包文件中,我们可以期待找到一些与Java算法相关的知识点和实践示例。 在Java中,经典算法主要包括排序、查找、图算法、动态规划、贪心算法、回溯法等。以下是对这些关键概念的...
Java遗传算法排课系统是一种利用遗传算法解决复杂优化问题的软件应用。在教育领域,排课是一个典型的组合优化问题,需要考虑多方面的约束条件,如教师时间冲突、教室容量限制、课程时间安排等。遗传算法作为一种启发...
【标题】:“经典算法问题的Java实现<二>” 在这个主题中,我们将深入探讨Java编程语言在解决经典算法问题上的应用。算法是计算机科学的基础,它们是解决问题的步骤和方法,而Java作为一种强大的面向对象的语言,...
在本资源中,我们关注的是"经典算法问题的java实现<一>",这通常涉及到计算机科学中的基础算法,特别是那些用Java编程语言实现的。这些算法是解决各种计算问题的关键,包括排序、搜索、图论、动态规划等。Java作为一...
Java经典算法汇总 Java经典算法汇总.pdf中提供了多种排序算法的实现,包括冒泡排序、选择排序和插入排序。这些算法都是Java语言中最基本和最常用的排序算法。 冒泡排序算法 冒泡排序算法是一种简单的排序算法,它...
经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法...
装载问题-分支限界算法-java实现 装载问题 装载问题是一种经典的组合优化问题,目的是在有限的容量内装载尽可能多的物品,以达到最大化总重量或总价值。装载问题有多种变种,包括0/1背包问题、分支限界问题、动态...
《数据结构与算法经典问题解析 Java语言描述》第二版是一本深入探讨计算机科学核心领域的书籍,专注于使用Java语言来阐述和实现数据结构和算法。这本书是程序员和计算机科学学生的宝贵资源,因为它涵盖了从基础到...
本书“数据结构与算法经典问题解析 Java语言描述”深入浅出地探讨了这个主题,旨在帮助读者提升编程技能并增强解决问题的能力。 首先,数据结构是存储和组织数据的方式,它包括数组、链表、栈、队列、树、图、哈希...
JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1)JAVA 经典算法集合(1),JAVA 经典...
以上四个算法涵盖了从基本的数学概念到实际问题解决的各种应用场景,是Java程序员学习和掌握的重要基础。通过理解和实践这些经典算法,可以有效提升个人的逻辑思维能力和编程技能,对于面试或日常项目开发都有着不可...
JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2),JAVA 经典算法书集合(2)JAVA 经典算法书集合...