maomao_dreamhigh 2020-10-20 10:42 采纳率: 0%
浏览 61

如果是1000个点,要求返回组大小为s的所有组合,并且把组合结果保存下来,该怎么做呢?这个时候感觉递归就不可以了,肯定会内存不够

public static void bfs(int s, int start, ArrayList<GraphPoints<MultiDim>> list, ArrayList<GraphPoints<MultiDim>> now, ArrayList<ArrayList<GraphPoints<MultiDim>>> ans) {
        if(now.size() == s) {
            ans.add(now);
        }else {
            for(int i=start;i<list.size();i++) {
                ArrayList<GraphPoints<MultiDim>> temp = new ArrayList<>(now);
                temp.add(list.get(i));
                bfs(s,i+1,list,temp,ans);
            }
        }
    }

我自己是这么做的,然后就显示“java.lang.OutOfMemoryError: GC overhead limit exceeded”

  • 写回答

1条回答 默认 最新

  • \u001F 2023-06-01 14:54
    关注

    temp导致的吧

    public static void bfs(int targetSize, int start, List<GraphPoints<MultiDim>> pointsList, List<GraphPoints<MultiDim>> currentList, List<List<GraphPoints<MultiDim>>> resultList) {
        if (currentList.size() == targetSize) {
            resultList.add(new ArrayList<>(currentList));
        } else {
            for (int i = start; i < pointsList.size(); i++) {
                currentList.add(pointsList.get(i));
                bfs(targetSize, i + 1, pointsList, currentList, resultList);
                currentList.remove(currentList.size() - 1); // 回溯,移除最后一个元素
            }
        }
    }
    ```java
    
    
    

    ```

    评论

报告相同问题?