Java Array更改值的一半等

时间:2017-09-28 01:19:17

标签: java arrays sorting

所以我有一个接受数组大小的方法。我的方法使数组的一半为0。

int [] arrary2 = new int[arraySize];
for(int i = 0; i < arraySize/2; i++){
    arr2[i] = 0;
}
//do rest of code?
return array2;

如何将数组后半部分的一半变为1,依此类推。 例如,大小为14的数组,但数组大小可以是任何大小?

[0,0,0,0,0,0,0,1,1,1,1,2,2,3]

3 个答案:

答案 0 :(得分:2)

粗略算法:

  • 计算剩下的一半(小心奇数/偶数)
  • 使用当前值填写
  • 重复

示例代码:

public static int[] createArray(int size)
{
    int[] array = new int[size];
    int half = (size / 2) + (size % 2);
    int index = half;
    int value = 0;
    for (int i = 0; i < size; i++) {
        if (i == index) {
            half = (half / 2) + (half % 2);
            index += half;
            value++;
        }
        array[i] = value;
    }
    return array;
}

示例输出:

15 => 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3
14 => 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3

答案 1 :(得分:2)

以这种方式:

import java.util.Arrays;

public class Main {

    static int[] createArray(int size) {
        int[] result = new int[size];

        int limit = (size + 1) / 2;

        int start = 0, value = 0, idx = 0;

        do {
            for (int i = start; i < start + limit && idx < size; ++i)
                result[idx++] = value;

            start += limit;
            limit = (limit + 1) / 2;
            ++value;
        } while (idx < size);

        return result;
    }

    public static void main(String[] args) {
        int[] result = createArray(70);
        System.out.println(Arrays.toString(result));
    }
}

几项测试:

14 => [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3]
70 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4]

答案 2 :(得分:1)

要执行此操作,请跟踪您希望输入值更改的位置,输入值以及在下次更改之前要执行的插入次数。

        int[] arrary2 = new int[arraySize];
        int currentEndPoint = (arraySize / 2) + (arraySize % 2);
        int endPointIncrement = currentEndPoint;
        int currentInputValue = 0;
        for (int i = 0; i < arraySize; i++)
        {
            if (i == currentEndPoint - 1)
            {
                currentInputValue++;
                endPointIncrement = (endPointIncrement / 2) + (endPointIncrement % 2);
                currentEndPoint = currentEndPoint + endPointIncrement;
            }
            arrary2[i] = currentInputValue;
        }
        return arrary2;

希望这有帮助