使用多线程打印从给定行和列螺旋出的矩阵

时间:2017-05-01 18:30:04

标签: java multithreading algorithm matrix multidimensional-array

我最近在接受采访时被问到这个问题。花了好几个小时之后,我确实提出了一个单线程实现,但我觉得它效率低下,我不知道如何使它成为多线程。

这是我的实施:

public List<Integer> print(int[][] input, int row, int col) {
    int n = input.length;
    List<Integer> result = new ArrayList<>(n * n);
    int i = row;
    int j = col;
    int steps = 1;
    int k = 0;
    while (true) {

        k = steps;

        while (k > 0) {
            if (inBounds(i, j, n)) {
                result.add(input[i][j]);
            }
            j++;
            k--;
        }

        if (i > row + 4 || j > col + 4)
            break;

        k = steps;

        while (k > 0) {
            if (inBounds(i, j, n)) {
                result.add(input[i][j]);
            }
            i++;
            k--;
        }

        if (i > row + 4 || j > col + 4)
            break;

        steps++;

        k = steps;

        while (k > 0) {
            if (inBounds(i, j, n)) {
                result.add(input[i][j]);
            }
            j--;
            k--;
        }

        if (i > row + 4 || j > col + 4)
            break;

        k = steps;

        while (k > 0) {
            if (inBounds(i, j, n)) {
                result.add(input[i][j]);
            }
            i--;
            k--;
        }
        steps++;

        if (i > row + 4 || j > col + 4)
            break;

    }
    return result;
}

boolean inBounds(int i, int j, int n) {
    return (i >= 0 && i <= n - 1 && j >= 0 && j <= n - 1);
}

0 个答案:

没有答案