Java 不使用临时数组的索引处的平方值
第0个索引的值是4,因此我必须检查索引4处的值并将其平方,然后将值放置在第0个索引处,而不使用临时数组Java 不使用临时数组的索引处的平方值,java,arrays,Java,Arrays,第0个索引的值是4,因此我必须检查索引4处的值并将其平方,然后将值放置在第0个索引处,而不使用临时数组 Index 0 1 2 3 4 Values 4 3 1 2 0 ================ Result 0 4 9 1 16 现在我得到了前两个正确的值,但后三个不正确 我的代码如下 static void Index(int arr[], int n) { for(int i=0;i<n;i++) { int index = arr[i];
Index 0 1 2 3 4
Values 4 3 1 2 0
================
Result 0 4 9 1 16
现在我得到了前两个正确的值,但后三个不正确
我的代码如下
static void Index(int arr[], int n) {
for(int i=0;i<n;i++) {
int index = arr[i];
int value = arr[index];
arr[i]=value*value;
}
}
有人能帮我解决我做错了什么吗?问题是您正在更改原始数组中的值。在您当前的实现中,这是您的阵列在每次迭代中的变化方式:
{4, 3, 1, 2, 0}
{0, 3, 1, 2, 0}
{0, 4, 1, 2, 0}
{0, 4, 16, 2, 0}
{0, 4, 16, 256, 0}
问题是每次迭代仍然需要存储在原始数组中的值。因此,解决方案是保持原始数组不变,并将值放入新数组中
public static void index(int arr[]) {
int[] arr2 = new int[arr.length];
for(int i=0;i<arr.length;i++) {
int index = arr[i];
int value = arr[index];
arr2[i]=value*value;
}
}
假设数字在[046341]的范围内,我们可以在这个过程中将旧值和新值存储在数组中,因为32位就足够了。然后在第一次循环之后,我们再进行一次循环,丢弃旧值并将新值平方
// assume array[i] is within range [0, 46341) for any i
static void f(int[] array) {
for (int i = 0; i < array.length; i++) {
int j = array[i] & 0xffff; // get old value
array[i] = array[j] << 16 | j; // put new and old values
}
for (int i = 0; i < array.length; i++) {
int j = array[i] >>> 16; // get new value
array[i] = j * j; // put new value squared
}
}
不要使用标题部分进行描述,这是描述部分的目的。我已否决了此问题,因为没有证据表明对此代码执行了任何调试。请通过您的问题向我们展示您的调试发现了什么,以及有关特定代码行的特定问题。请参阅:和。好的,我将编辑现在,在你的方法中,n参数的实际用途是什么?数组的长度是:arr.length,而不是n。你当时说的是你真的不需要n。我不能使用另一个数组,这是我的代码对我无效的条件situation@Ajinkya-那么你文章的标题有点冲突,因为它说:…使用临时阵列。它是哪一个?
{0, 0, 0, 0, 0}
{0, 0, 0, 0, 0}
{0, 4, 0, 0, 0}
{0, 4, 9, 0, 0}
{0, 4, 9, 1, 0}
{0, 4, 9, 1, 16}
// assume array[i] is within range [0, 46341) for any i
static void f(int[] array) {
for (int i = 0; i < array.length; i++) {
int j = array[i] & 0xffff; // get old value
array[i] = array[j] << 16 | j; // put new and old values
}
for (int i = 0; i < array.length; i++) {
int j = array[i] >>> 16; // get new value
array[i] = j * j; // put new value squared
}
}