【问题标题】:How does the 2nd for loop is working like it is inside the 1st for loop?第二个 for 循环如何像在第一个 for 循环内一样工作?
【发布时间】:2019-10-18 11:56:38
【问题描述】:

我尝试使用嵌套的 for 循环解决 Codility 示例测试,但它的性能不够好。然后我尝试了以下解决方案,我工作正常。但我不知道第二个 for 循环在第二个解决方案中是如何工作的。

第一个解决方案没有足够的性能。 https://app.codility.com/demo/results/training5Z4ZB8-385/

第二种解决方案是正确的,具有良好的性能。 https://app.codility.com/demo/results/training4E8QZS-MQK/

public class Solution5 {
    public int[] solution(int N, int[] A) {
        int[] counter = new int[N];
        int maxUpdate = 0, I, B = 0;
        for (int i = 0; i < A.length; i++) {
            I = A[i] - 1;
            if (A[i] >= 1 && A[i] <= N) {
                counter[I] = Math.max(B,counter[I]) + 1;
                maxUpdate = Math.max(maxUpdate, counter[I]);
            } else if (A[i] == (N + 1)) {
                B = maxUpdate;
            }
        }
        for (int i = 0; i < counter.length; i++) {
            counter[i] = Math.max(B, counter[i]);
        }
        return counter;
    }
}

【问题讨论】:

    标签: java for-loop


    【解决方案1】:

    这个想法是将最大计数器操作推迟到最后。您可能已经注意到,如果没有先用B 计算最大值,则永远不会使用计数器的值,而B 是最后一次在A 中找到N+1 时的最大值(maxUpdate) . maxUpdate 始终包含计数器数组中的最大值:它与所有计数器一样从零开始,每次计数器增加时,maxUpdate 都会更新。

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多