如何返回最右边的正数数组削减?

时间:2019-03-31 11:53:16

标签: java arrays

我的任务:输入是一维数组。必须找到最大宽度的范围,该范围的元素为正(大于0)。 作为响应,应该有2个元素组成的数组,其中: -元素编号0-段左边界的索引元素; -元素№1-段右边界元素的索引。

如果有多个这样的段,则返回RIGHT。如果数组中没有这样的段(所有数字均为负),则返回一个空数组。 我不明白我做错了什么。有我的代码:

public class ArrayUtils {
public static int[] lookFor(int[] array) {
    int[] result = new int[2];
    int firstIndex = 0;
    int lastIndex = 0;
    int sequenceLength = 0;
    int currentSequenceLength = 0;

    for (int i = 0; i < array.length; i++) {
        if (array[i] > 0) {
            if ( currentSequenceLength == 0 ) {
                firstIndex = i;
            }

            currentSequenceLength += 1;
            lastIndex = i;
        } else {
    if (currentSequenceLength > sequenceLength) {
        sequenceLength = currentSequenceLength;
        result[0] = firstIndex;
        result[1] = lastIndex;
    }
            currentSequenceLength = 0;
        }
    }


    if (sequenceLength == 0) {
        return new int[0];
    }

    return result;
}

}

1 个答案:

答案 0 :(得分:1)

我看到两个问题:

  1. if there are several such segments, return the RIGHT-这意味着即使长度相同,也应将前一个最长的序列替换为当前的最长序列。即if (currentSequenceLength > sequenceLength)应该是if (currentSequenceLength >= sequenceLength)

  2. 您将忽略任何以数组的最后一个索引结尾的序列。您应该在循环后通过添加以下内容来处理它:

    if (currentSequenceLength >= sequenceLength) {
        sequenceLength = currentSequenceLength;
        result[0] = firstIndex;
        result[1] = lastIndex;
    }
    

总而言之,您的方法应如下所示:

public static int[] lookFor(int[] array) {
    int[] result = new int[2];
    int firstIndex = 0;
    int lastIndex = 0;
    int sequenceLength = 0;
    int currentSequenceLength = 0;

    for (int i = 0; i < array.length; i++) {
        if (array[i] > 0) {
            if ( currentSequenceLength == 0 ) {
                firstIndex = i;
            }

            currentSequenceLength += 1;
            lastIndex = i;
        } else {
            if (currentSequenceLength >= sequenceLength) {
                sequenceLength = currentSequenceLength;
                result[0] = firstIndex;
                result[1] = lastIndex;
            }
            currentSequenceLength = 0;
        }
    }
    if (currentSequenceLength >= sequenceLength) {
        sequenceLength = currentSequenceLength;
        result[0] = firstIndex;
        result[1] = lastIndex;
    }


    if (sequenceLength == 0) {
        return new int[0];
    }

    return result;
}