-1

我需要我的代码向后看一个数组,比如:[20, 15, 9, 2, 11, 9, 11, 10, 3]

它需要找到满足在元素 + - 2 创建的区间内的元素。

前任。3 创建区间 [1-5] 因为下一个元素比区间高 10。我们移动到创建区间 [8-12] 的元素 10,我们看到 11、9、11、9 和 10 本身在该区间内,将它们添加到新数组中。(高于区间的元素应该会使代码中断,较小的元素是可以的)。

输入前:[20, 15, 9, 2, 11, 9, 11, 10, 3] 输出前:[9, 2, 11, 9, 11, 10, 3] or [9, 11, 9, 11, 10]

输入前:[20, 15, 9, 2, 11, 20, 11, 10, 3] 输出前:[11, 10, 3][11, 10]

我已经尝试了很多方法,因为我很新,所以我对能够在数组中做什么不是很有经验。我在网上看了一点运气。

到目前为止,我想出的是:

List<Integer> thetops = new ArrayList<Integer>();
double lowerFactor = 0.8;
double upperFactor = 1.2;


for(int k = tops.size()-1; k > 0; k--){
    double lowerLimit = tops.get(k) * lowerFactor;
    double upperLimit = tops.get(k) * upperFactor;

    if (tops.get(k-1) > upperLimit){
        k=k-1;

        }
    if (tops.get(k) >= lowerLimit && tops.get(k) <= upperLimit){
        thetops.add(tops.get(k));
    }
}

我试图做的是选择最后一个元素,如果下一个元素高于移动到该元素的间隔,则从该值创建一个间隔。但如果下一个元素在该区间内,则将其添加到新数组中。

4

1 回答 1

0

如果我理解正确,您想删除所有高于特定阈值的值并删除重复项,对吗?

如果是这种情况,则尝试使用SortedSet(或SortedMap),将所有值添加到将删除重复项的集合中,然后获取该排序集的头集,即获取小于阈值的所有值(如果阈值应该也被包含,将阈值 + 1 传递给headSet(...)方法)。

如果您需要保留数组中的排序,您可能需要使用映射并将值用作键并将数组索引用作值。

于 2012-05-15T13:42:48.833 回答