如何递归地从泛型列表中获取范围内的所有元素?

A1999

给定一个泛型类型列表(List),以及两个泛型类型对象:a,b:

- 设计一个算法,该算法返回一个列表,该列表包含原始列表中属于范围 [a,b) 的每个元素。

- 算法必须包含比较器 E。

- 解决方案必须是“分而治之”的算法。

这就是我想出的:

private static <E extends Comparable<E>> List <E> Dominio(List<E> lista, E a, E b){

    return DominioAux(lista,a,b,0,lista.size()-1);
}

private static <E extends Comparable<E>> List <E> DominioAux(List<E> lista, E a, E b,Integer i, Integer j){

    List<E> res = new ArrayList<>();
    Integer m = (j-i)/2;
    E pm = lista.get(m);

    if (pm == a) {
        DominioAux(lista,a,b,m,j);
    } else if(pm==b) {
        DominioAux(lista,a,b,i,m-1);
    }

    if (pm.compareTo(a)<0) {
        res = DominioAux(lista,a,b,m,j);
    }   

    if (pm.compareTo(a)>0) {
        res = DominioAux(lista,a,b,i,m);
    }

    res = lista.subList(i, j);
    return res;     
}

问题是当执行其中一个 if 时,我要么得到“索引越界异常”或“堆栈溢出错误”。

b.吉拉斯

使用分而治之范式的一种可能的解决方案

private static <E extends Comparable<E>> List <E> DominioAux(List<E> lista, E a, E b,Integer i, Integer j){
    List<E> res = new ArrayList<>();

    if(i >= j) { //Check if the value of list[i] is in the range [a,b)
        if (lista.get(i).compareTo(a) >= 0 && lista.get(i).compareTo(b) < 0) {
            res.add(lista.get(i));
        }

        return res;
    }

    Integer m = (i + j) / 2;
    List<E> list1 = DominioAux(lista, a, b, i, m);
    List<E> list2 = DominioAux(lista, a, b, m + 1, j);

    res.addAll(list1);
    res.addAll(list2);

    return res;
}

您的方法中的一个错误是在计算 m 时,如果 i 和 j 则 m 应该是中间值然后计算它您必须添加 i 和 j 而不是从 j 中减去 i

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取日期范围内的所有行的列表

如何获取嵌套列表范围内的元素

如何有效地查找网格中某个范围内的元素总数?

在JavaScript中获取给定日期范围内的所有日期的列表

如何“或”数组范围内的所有元素

在Swift中推进范围内的所有元素?

在列表的特定范围内获取元素

如何生成范围内所有可能排列的列表

如何获取范围内所有可用变量?

在GeoFire中获取特定范围内的所有对象

如何在移动范围内总结列表中的元素

如何在F#中递归地添加列表中的所有元素?

如何使用bash中可用的工具生成范围内所有日期的列表?

获取范围内的所有变量

如何在“ Google我的商家Api”中获取日期范围内的所有评论?

如何在C#中获取日期范围内的所有周末

如何使数据在Angularjs中的所有范围内可用

如何清除向量中除特定范围内的最大元素以外的所有元素?

如何通过递归获取给定范围内的日期列表

如何使用递归获取给定范围内的日期列表

获取二维数组范围内所有元素的有效方法?

递归获取嵌套列表的所有元素

如何使用Java 8中的lambda和流检查整数类型的所有元素是否在给定范围内?

如何从MySQL提供的经纬度和long中获取半径范围内的所有结果

如何在 ES6 javascript 类中的泛型方法中获取所有 getter setter 属性的列表或数组?

如何替换给定范围内列表列表中的元素?

红宝石,如何查找数组的所有元素都在日期范围内

递归检索列表中的所有元素

Tensorflow获取范围内的所有变量