POJ 2081 JAVA
2015-11-12 18:19
615 查看
http://poj.org/problem?id=2081
一个序列问题,为了时间效率,最好的方法是先计算出整个序列,这种时间复杂度其实只有O(1),然而如果对于每个输入分别计算,其实根本算法上并没有差别。
布尔数组开个400W就够了,因为最大值是3012500,表示结果的数组其实没必要开这么大。
话说用平衡树会快一点吗?
JAVA 代码如下
import java.util.Scanner;
public class Recaman_Sequence2 {
static boolean b[];
static int a[];
static int k,res;
// static int max=0;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
b=new boolean[5000000];//max:3012500
a=new int[5000000];
a[0]=0;
R(0);
while(-1!=(k=Integer.parseInt(sc.nextLine()))){
System.out.println(a[k]);
}
}
private static void R(int start) {
for(int i=1;i<=500000;i++){
if(a[i-1]-i>0&&!b[a[i-1]-i]){
b[a[i-1]-i]=true;
a[i]=a[i-1]-i;
}else{
b[a[i-1]+i]=true;
a[i]=a[i-1]+i;
}
// max=a[i]>max?a[i]:max;
}
}
}
一个序列问题,为了时间效率,最好的方法是先计算出整个序列,这种时间复杂度其实只有O(1),然而如果对于每个输入分别计算,其实根本算法上并没有差别。
布尔数组开个400W就够了,因为最大值是3012500,表示结果的数组其实没必要开这么大。
话说用平衡树会快一点吗?
JAVA 代码如下
import java.util.Scanner;
public class Recaman_Sequence2 {
static boolean b[];
static int a[];
static int k,res;
// static int max=0;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
b=new boolean[5000000];//max:3012500
a=new int[5000000];
a[0]=0;
R(0);
while(-1!=(k=Integer.parseInt(sc.nextLine()))){
System.out.println(a[k]);
}
}
private static void R(int start) {
for(int i=1;i<=500000;i++){
if(a[i-1]-i>0&&!b[a[i-1]-i]){
b[a[i-1]-i]=true;
a[i]=a[i-1]-i;
}else{
b[a[i-1]+i]=true;
a[i]=a[i-1]+i;
}
// max=a[i]>max?a[i]:max;
}
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统