我想知道是否有一种方法可以在没有除法运算符的情况下将数组分成两个?对于我正在做的任务,我不能使用/或加倍。我知道数组的大小,我知道我可以将两个子数组的大小设置为原始数组的一半,但我只是想知道是否有一种方法没有硬编码。谢谢。
答案 0 :(得分:3)
假设您想要在不使用除法运算符的情况下找到数组的中间索引,并且您想要使用" 使用/ 或加倍 "意味着你不能使用浮点值(因此乘以0.5是不可能的)。
您可以查看bit-shift运算符。一个例子:
int[] myArray = new int[128];
int middleIndex = myArray.length >> 1; // middleIndex is now 64
middleIndex = middleIndex >> 1; // 32
将整数一位向右移位相当于除以2。
答案 1 :(得分:0)
你可以通过将一个变量设置为零而另一个变量设置到数组的末尾来找到数组的中间位置,然后在循环中递增1并递减另一个直到它们相遇或交叉。
如果你的数组有一个奇数长度,它们最终会相等,那将是数组中间元素的索引。
如果您的数组具有偶数长度,它们将相差1,并标记数组的中间两个元素。