java 位数过大_Java操纵大位数

在我的业余时间里,我一直在为Interview Street挑战改变比赛现在已经有一个多星期了,而且此时只是转动我的车轮,所以我希望有人可以给我一个正确方向的指针或暗示.

挑战的基础是两个字符串A& B并运行一些操作两位字符串的查询.

设A和B为两个N位数.您将获得A和B的初始值,您应该编写一个处理三种查询的程序:

> set_a idx x:将A [idx]设置为x,其中0 <= idx< N,其中A [idx]是

idx’th最重要的一点A.

> set_b idx x:将B [idx]设置为x,其中0 <= idx< N.

> get_c idx:打印C [idx],其中C = A B,并且0 <= idx

其中位数的长度为1到100,000,并且程序可以具有set_a,set_b或get_c的任意组合的1到500,000个查询.

为了最小化循环,我使用C作为运行总计.当A或B中的位改变时,也从C加上或减去改变的位.当存在进位时,进一步最小化加法和减法时的循环从改变的位到左手.

private static void add(final boolean[] the_array, final int the_index)

{

for(int iter = the_array.length - the_index - 1; iter >= 0; iter--)

{

if(the_array[iter])

{

the_array[iter] = false;

}

else if(!the_array[iter])

{

the_array[iter] = true;

return ;

}

}

}

private static void subtract(final boolean[] the_array, final int the_index)

{

for(int iter = the_array.length - the_index - 1; iter >= 0; iter--)

{

if(the_array[iter])

{

the_array[iter] = false;

return ;

}

else if(!the_array[iter])

{

the_array[iter] = true;

}

}

}

整体而言,该程序运行良好,完成了最大边缘长度为100,000和500,000次查询在大约120ms内运行,但它仍然不够快,无法应对挑战.由于比特长度的大小快速超过Java中的原始整数(长)值,因此大多数API不适用于此.由于我没有取得多大进展,因此整体运行时间的大小开始表明可能存在一种算法或数据结构,而不仅仅是一个数组.有什么想法吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值