标签:java Scanner int day2 son static new public
目标:Java web开发
直至今天,完成度:2%
给定你一个有约十万个数的整数数列,每个整数大于等于0小于等于20亿。
请你在1秒内算出,任选两个数进行异或运算得到结果的最大值。
输入样例(10个数时):
10
181262 369842 1036879 546331 868986 496157 646816 459571 215643 448018
输出样例:
1033222
import java.util.*;
public class Main{//记得要加static修饰,变量和函数不加static修饰是不会作用的
static int[] a;
static int[][] son;//建造huffman树,节点为index
static int idx;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
a=new int[n];
son=new int[31*n][2];
int res=0;
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
insert(a[i]);
res=Math.max(res,find(a[i]));
/*今天,我学会了几个Math函数
Math.sqrt() : 计算平方根
Math.max( , ) : 计算最大值
Math.min( , ) : 计算最小值
Math.abs() : 取绝对值
Math.ceil(): 返回double类型,向数值较大的方向取整
Math.floor() : 返回double类型,向数值较小的方向取整
*/
}
/*当然,上面的for循环以及for循环里面的函数也可以用两层for循环代替
前提是你能忍受十分钟的运行时间。
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++) res=Math.max(res,a[i]^a[j]);
*/
System.out.print(res);
}
public static void insert(int x){
int p=0;
for(int i=30;i>=0;i--){
int u=x>>i&1;
if(son[p][u]==0) son[p][u]=++idx;
//这里不能直接写int型的son[p][u],if()里的只能是boolean型
p=son[p][u];
}
}
public static int find(int x){
int p=0,k=0;
for(int i=30;i>=0;i--){
int u=x>>i&1,v=u^1;
if(son[p][v]!=0){
k=(k<<1)+v;
p=son[p][v];
}
else{
k=(k<<1)+u;
p=son[p][u];
}
}
return k^x;
}
}
明天目标:完成3%
标签:java,Scanner,int,day2,son,static,new,public 来源: https://www.cnblogs.com/zhuangzhongxu/p/14964324.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。