如何检查列表中是否存在小于另一个列表中的元素的元素

时间:2020-09-23 06:11:16

标签: java

考虑两个数组列表

a = [1,4,2,4] 

b = [3,5] 

我想返回B中每个数字的计数小于A中的数字。

所以答案将是[2,4],因为B中的3在A中有2个数字,即<= 3,即[1,2]

B中的5具有A中的4个数字,这些数字<= 5。即[1,4,2,4]

注意:我尝试使用2个循环,但测试用例超时。

这是代码

static ArrayList<Integer> counting(ArrayList<Integer>A, ArrayList<Integer>B)   
{
     
    ArrayList<Integer> finallist = new ArrayList<>();

    for(int i : B)
    { 
        int count = 0;
        for(int j: A)
        {
            if(j<=i)
                count++;

           
        }
         finallist.add(count);
    }

    return finallist;
}

我们应该编辑函数并返回arraylist

2 个答案:

答案 0 :(得分:1)

当我看到一个数组时,我需要查找 smth。因此,这是使用二进制搜索魔术键。这使您O(n log n)的时间变得很复杂。

public static int[] findLessNumbers(int[] a, int[] b) {
    TreeMap<Integer, Integer> numCount = new TreeMap<>();

    for (int aa : a)
        numCount.put(aa, numCount.getOrDefault(aa, 0) + aa);

    int total = 0;

    for (Map.Entry<Integer, Integer> entry : numCount.entrySet())
        numCount.put(entry.getKey(), total += entry.getValue());

    int[] res = new int[b.length];

    for (int i = 0; i < res.length; i++)
        res[i] = Optional.ofNullable(numCount.floorKey(b[i])).orElse(0);

    return res;
}

答案 1 :(得分:0)

我从您的问题中了解到,您找不到答案。 希望对您有所帮助。

您的代码在对函数参数进行计数时遇到问题,您应该声明所期望的数据类型是什么。 static ArrayList counting(List A, List B)这不是一种方法 相反,您应该写static ArrayList counting(ArrayList<Integer> A, ArrayList<Integer> B)

这将解决您的问题。

这是我的解决方案:

计数功能。

private static ArrayList counting(ArrayList<Integer>A, ArrayList<Integer>B ){
    ArrayList<Integer> finallist = new ArrayList<>();
    
    for(int i : B) {
        int count = 0;
        for(int j : A) {
            if(j <= i) {
                count++;
            }
        }
        finallist.add(count);
    }
    
    return finallist;
}

主叫方计数:

ArrayList<Integer> ans = counting(A,B);
        for(int i : ans) {
            System.out.print(i+" ");
        }

输出:

2 4 

这可以解决您面临的问题。