
算法设计
文章平均质量分 68
bruce_suxin
坚持就是胜利
展开
-
递归一之阶乘
阶乘很简单这里就不细说了,代码如下package jiecheng;public class jiecheng { public static int f(int n) { if (n==1) { return 1; }else{ return n*f(n-1); }原创 2016-10-26 19:52:39 · 236 阅读 · 0 评论 -
Java如何找出数组中前k个高频元素
比如,一个数组为:[1,2,3,5,2,3,5,7,7,7,5,7 ]前2个高频元素就是7和5。思路:最简单的办法就是采用两层for循环去遍历,时间复杂度为O(n2)。方法二:先用快速排序将数组排序,然后依次找出前k个高频元素,时间复杂度O(NLogN)。方法三:可以采用HashMap,这种方式时间复杂度为O(N),空间复杂度O(N)。下面采用第三种方式:转载 2017-02-02 14:21:12 · 866 阅读 · 1 评论 -
如何计算一个算法的时间复杂度和空间复杂度
相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。 常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是: ⑴ 找出算法中的基本语句; 算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。 ⑵ 计算基本语句的执行次数的数量级; 只需计算基本语句执行次数的数量级,这转载 2017-02-02 14:19:19 · 5114 阅读 · 2 评论 -
double类型的2.0-1.1为什么等于0.89999999999999999999
double类型占了64位。 第一位为符号位,0为正,1为负。最后52位为十进制转换为二进制后的值。中间11位为阶码,可表示-1024~1023,表示最后52位为2的多少次方。比如最后52位为二进制的1.0*2^1(即二进制10),那么十一位阶码的十进制值为1,为了方便表示,加上1023变成非负数。float类型占32位(1位符号位,8位阶码,23位二进制值)转载 2017-02-09 22:48:50 · 2196 阅读 · 0 评论 -
快速幂取模算法
参考文章来源:Reait Home(http://www.reait.com/blog.html) 转载请注明,谢谢合作。 在Miller Rabbin测试素数,就用到了快速幂取模的思想。这里总结下。求a^b%c(这就是著名的RSA公钥的加密方法),当a,b很大时,直接求解这个问题不太可能 算法1:利用公式a*b%c=((a%c)*b)%c,这样每一步转载 2017-02-09 21:32:07 · 696 阅读 · 0 评论 -
素数筛法
素数筛法 素数是ACM中数论题目常常涉及到得问题。最基本的问题就是如何判断一个数是素数以及如何快速的打出题目涉及范围的素数表。当然数论中关于素数的问题会比较复杂,在这里仅就素数的不同筛法做出总结。 素数,就是只有1和自身两个约数的正整数。2是最小的素数。根据定义,我们就可以直接判断一个数字n是否是素数。优化后的复杂度是O(n*sqrt(n))。至于为什么,我就不做赘述了转载 2017-02-05 20:19:25 · 288 阅读 · 1 评论 -
海选女主角
第一种方法所消耗的时间较多java代码 import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) {原创 2016-11-14 21:44:51 · 1346 阅读 · 0 评论 -
超级楼梯
本道题就是讲解斐波那契数列 原理:1 1 2 3 5 8 13 21 当前项等于前两项之和C语言代码//斐波那契//序列 1 1 2 3 5 8 13 21 34#includeint main() { int i,n,m; int a[50]; m=1; scanf("%d",&m); while(m--) { scanf("%d原创 2016-11-14 21:38:12 · 613 阅读 · 0 评论 -
四舍五入的各种方法
java取整和java四舍五入方法 import java.math.BigDecimal; import java.text.DecimalFormat;public class TestGetInt{ public static void main(String[] args){ double i=2, j=2.1, k=2.5, m=2.9; System.out.p转载 2016-10-29 00:21:04 · 551 阅读 · 0 评论 -
递归之斐波那契数列java的三种写法
第一种普通写法public class Demo { public static void main(String[] args) { int num1 = 1; int num2 = 1; int num3 = 0; System.out.println(num1); System.out.pr原创 2016-10-26 20:02:28 · 17385 阅读 · 1 评论 -
【java基础】八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字转载 2017-02-02 15:37:12 · 414 阅读 · 0 评论